一.C#循环插入数据
数据库连接语句中的security=True意思是连接本地的服务器,如果连接远程的服务器需改成false或者不写,默认也是false
1.封装数据类
public class UserData
{
//打卡时间
public string time { get; set; }
//类型
public string type { get; set; }
//卡号
public string cardNumber { get; set; }
}
2.实例化封装的类添加数据
List<UserData> modelList = new List<UserData>();
UserData model = new UserData();
model.cardNumber = "接收的数据";
modelList.Add(model);//添加到集合中
3.代码需理解,内含无用的Linq筛选代码,记得使用时进行删减
try
{
string conn = "data source=.;database=ClockinData;integrated security=True";
SqlConnection mycon = new SqlConnection(conn); //定义SqlConnection对象实例并连接数据库
mycon.Open();
string myinsert = string.Empty;
modelList = modelList.Where(p => p.type == "FINGERPRINT_COMPARE_PASS" || p.type == "4b").ToList();
foreach (var item in modelList)//变量集合循环导入至数据库
{
/*因为item.cardNumber变量中包含字节流右斜线,
* 会影响数据库语句的拼接所以要分割
*/
var Time = item.cardNumber.Split('\0');
item.cardNumber = Time[0];
if (!string.IsNullOrEmpty(item.cardNumber))//有卡号则导入
{
myinsert = "INSERT INTO UserData(time,type,Cardnumber) VALUES('" + item.time + "','" + item.type + "','" + item.cardNumber + "')";
SqlCommand mycom = new SqlCommand(myinsert, mycon); //定义对象并连接数据库
mycom.ExecuteNonQuery();
}
//执行插入语句
}
///若表名字固定,例如为table1,则上一条语句为:"insert into table1 values()";
///vulues 中为待插入的数据,需与表中列的顺序一一对应。
//SqlCommand mycom = new SqlCommand(myinsert, mycon); //定义对象并连接数据库
//mycom.ExecuteNonQuery(); //执行插入语句
mycon.Close(); //关闭对象并释放所占内存空间
mycon.Dispose();
MessageBox.Show("导入成功");
}
catch (Exception)
{
MessageBox.Show("导入失败");
throw;
}
二丶数据库表的查询
1.data source是数据库地址,点表示本地,database为数据库的名称
string str = "data source=.;database=MyTest; integrated security=True ";//定义数据库连接参数
SqlConnection con = new SqlConnection(str);
con.Open();
SqlDataAdapter ad = new SqlDataAdapter("select * from [User] ", con);
DataSet set = new DataSet();
ad.Fill(set, "User");
//int kucun = Convert.ToInt32(set.Tables["dbo.User"].Rows[0]["User"]);
var user = set.Tables["User"].Rows[0]["User"];//查询User表中User字段的数据
var pwd =set.Tables["User"].Rows[0]["Pwd"];//查询User表中Pwd字段的数
2.peo类
public class Peo
{
public string name { get; set; }
public string pwd { get; set; }
}
3.将数据库DataSet中查询出的值进行集合化,集合化之后可根据一条数据中某列的值寻找对应的另一个值
public void GetPeoName() {
string str = "data source=.;database=MyTest; integrated security=True ";//定义数据库连接参数
SqlConnection con = new SqlConnection(str);
con.Open();
SqlDataAdapter ad = new SqlDataAdapter("select * from [MyUser] ", con);
DataSet set = new DataSet();
ad.Fill(set, "MyUser");
//int kucun = Convert.ToInt32(set.Tables["dbo.User"].Rows[0]["User"]);
var ifdata = "身份证号";
List<Peo> pelist = new List<Peo>();
foreach (DataRow dt in set.Tables["MyUser"].Rows)
{
var i=0;
var pe = new Peo();
foreach (DataColumn dc in set.Tables["MyUser"].Columns)// 遍历所有列
{
var TableName = set.Tables["MyUser"].Columns[i++];//遍历所有列名
string dataname = TableName.ToString();
if (dataname == "Name"|| dataname == "Pwd")//只读取指定的列
{
var data = dt[dc.ColumnName];
//此方法只支持保存两个列值,暂定思路在第二次循环外定义i循环内定义i++,判断i的值进入指定的switch选择里面,跳出之后清空i的值
if (string.IsNullOrEmpty(pe.name))
{
pe.name = data.ToString();
}
else
{
pe.pwd = data.ToString();
}
}
}
pelist.Add(pe);
}
pelist = pelist.Where(p => p.pwd.Trim() == ifdata).ToList();
if (pelist.Any())
{
var name = pelist[0].name.Trim();//获取身份证号对应的人员名称
}
}