当前位置: 代码迷 >> C# >> 关于c#连接SQL server的有关问题。求大神解答
  详细解决方案

关于c#连接SQL server的有关问题。求大神解答

热度:137   发布时间:2016-05-05 05:15:16.0
关于c#连接SQL server的问题。。求大神解答!
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();算是真正解决了问题。

总得数据库操作流程不熟悉:
【打开数据库】-【实例化查询字符串并附加参数】-【执行查询】-【判断执行结果和处理结果集】-【关闭数据库】
  相关解决方案