繁体   English   中英

C#dataGridView到SQL(插入)

[英]c# dataGridView to SQL (insert)

我正在尝试将数据从datGridView插入SQL Server(我从Excel文件加载数据)。 但是我收到一个主键错误,该错误不应为null。

如果我使用这样的东西:

cmd.Parameters.AddWithValue("@id", 1012);

它返回重复的键错误...

这是我的代码:

private void btnTest_Click(object sender, EventArgs e)
{
        int stCol = dataGWseznam.Columns.Count;
        string[] poljeNaslovov = new string[dataGWseznam.Rows.Count];

        for (int i = 0; i < stCol; i++)
        {
            poljeNaslovov[i] = Convert.ToString(dataGWseznam.Columns[i].HeaderText);

        }

        string[] poljeNaslovovAfna = new string[dataGWseznam.Rows.Count];

        for (int i = 0; i < stCol; i++)
        {
            poljeNaslovovAfna[i] ="@" + Convert.ToString(dataGWseznam.Columns[i].HeaderText);

        }

        string msg1 = String.Join(",", poljeNaslovov.Where(s => !string.IsNullOrEmpty(s)));
        string msg2 = String.Join(",", poljeNaslovovAfna.Where(s => !string.IsNullOrEmpty(s)));

        try
        {
            foreach (DataGridViewRow row in dataGWseznam.Rows)
            {
                string constring = @"MY DATA SOURCE";

                using (SqlConnection conn = new SqlConnection(constring))
                {
                    using (SqlCommand cmd = new SqlCommand("INSERT INTO Monitoring(id,date,time) VALUES(@id,@date,@time)", conn))
                    {
                        cmd.Parameters.AddWithValue("@id", 1012);
                        cmd.Parameters.AddWithValue("@date", row.Cells["date"].Value);
                        cmd.Parameters.AddWithValue("@time", row.Cells["time"].Value);

                        conn.Open();
                        cmd.ExecuteNonQuery();
                        conn.Close();
                    }
                }
            }
        }
        catch (Exception ex)
        {
            //handle exception 
            MessageBox.Show(ex.Message);
        }
        MessageBox.Show("Done.");
}

我该如何解决?

发生第一个问题是因为显然您没有设置主键(在表上未将其设置为IDENTITY)。

选中此选项以查看如何将表配置为自动递增ID: https : //msdn.microsoft.com/zh-cn/library/ms186775(v=sql.120).aspx

发生“第二个”错误是因为ID在表上必须唯一。 因此,最好将ID设置为身份字段。

(我建议您在表上创建一个新列,然后删除当前列。您可以在此处找到操作方法: https : //social.msdn.microsoft.com/Forums/sqlserver/en-US/04d69ee6- d4f5-4f8f-a115-d89f7bcbc032 /如何更改列到Identity11?forum = transactsql

在对表进行此维护之后,您应该删除以下内容:

cmd.Parameters.AddWithValue("@id", 1012)

并从中更改您的插入语句:

INSERT INTO Monitoring(id,date,time) VALUES(@id,@date,@time)

对此:

INSERT INTO Monitoring(date,time) VALUES(@date,@time)

因为既然您的id列将是一个标识,所以您不需要提供它,因为它将自动为您提供增量。

希望这可以帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM