c#新手,想把DataGridView控件里的表导入到SQL Server数据库里,死活弄不进去orz。。求大神帮忙看下啊,代码在下面。数据库是可以成功连接的,我试过,程序也没异常,就是数据导不进去。。我怀疑是不是权限什么的有问题
private void button2_Click(object sender, EventArgs e)
{
//导入数据库
try
{
for (int i = 0; i < dataGridView1.Rows.Count - 1; i++)
{
string a = dataGridView1.Rows[i].Cells[0].Value.ToString();
string b = dataGridView1.Rows[i].Cells[1].Value.ToString();
string c = dataGridView1.Rows[i].Cells[2].Value.ToString();
string d = dataGridView1.Rows[i].Cells[3].Value.ToString();
string sql = "INSERT INTO dbo.1([姓名],[职务],[任职日期],[离职日期]) values(a,b,c,d)";
string sqlCon = "server=LI;database=li;Trusted_Connection=SSPI";
SqlConnection conn = new SqlConnection(sqlCon);
conn.Open();
SqlCommand cmd = new SqlCommand(sql, conn);
conn.Close();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
------解决思路----------------------
你调试一下,把sql变量的值拿出来,去数据库执行一下。
string sql = "INSERT INTO dbo.1([姓名],[职务],[任职日期],[离职日期]) values(a,b,c,d)";
改成
string sql = "INSERT INTO dbo.1([姓名],[职务],[任职日期],[离职日期]) values('"+a+"','"+b+"','"+c+"','"+d+"')";
------解决思路----------------------
果然很新,问题一堆.
private void xx(SqlConnection conn,string a,string b,string c,string d)
{
string sql = "INSERT INTO dbo.tabname([姓名],[职务],[任职日期],[离职日期]) values(@a,@b,@c,@d)";
conn.Open();
try
{
SqlCommand cmd = new SqlCommand(sql, conn);
AddParameter(cmd, "@a", a);
AddParameter(cmd, "@b", b);
AddParameter(cmd, "@c", c);
AddParameter(cmd, "@d", d);
cmd.ExecuteNonQuery();
}
finally
{
conn.Close();
}
}
private void AddParameter(SqlCommand cmd, string name, string a)
{
DbParameter p = cmd.CreateParameter();
p.ParameterName = name;
p.DbType = DbType.String;
p.Value = a;
p.Direction = ParameterDirection.Input;
cmd.Parameters.Add(p);
}
------解决思路----------------------
SqlCommand cmd = new SqlCommand(sql, conn);
命令要执行。cmd.ExecuteNonQuery();
------解决思路----------------------
确定sql语句么有问题。
你的cmd 什么都么有执行,当让不对了。
http://msdn.microsoft.com/zh-cn/library/System.Data.SqlClient.SqlCommand(v=vs.110).aspx
------解决思路----------------------
原来的问题:
string sql = "INSERT INTO dbo.1([姓名],[职务],[任职日期],[离职日期]) values(a,b,c,d)";
这a,b,c,d是字符串变量啊,怎么跑到一个字符串常量sql里面去了。。而且cmd命令么执行。
1楼拼接字符串的形式虽然暂时解决了问题,但又引发了SQL注入的安全隐患。
2楼改成参数化查询,解决了sql语句的问题,并添加了cmd.ExecuteNonQuery();算是真正解决了问题。
总得数据库操作流程不熟悉:
【打开数据库】-【实例化查询字符串并附加参数】-【执行查询】-【判断执行结果和处理结果集】-【关闭数据库】