使用C#中的主键将行插入数据库的最佳方法是什么?

时间:2014-05-09 10:38:33

标签: c# mysql sql

对不起我的模糊标题。基本上,我有一个呼叫记录应用程序,它使用带有2个表(客户和记录)的数据库来添加,删除和搜索记录。我在Records中有一个名为' CallID'我用来帮助保持呼叫唯一,所以我可以使用CallID删除特定记录。但是,问题在于我添加了调用函数。我目前拥有它,以便CallID是列表中的项目数增加1:

private void addcall_btn_Click(object sender, EventArgs e)
    {
        try
        {

            //This is my addcall click event that inserts a row in 'Records' table using what the user has entered into the fields
            string sql = "INSERT Records (CustomerID, CallID, CustomerName, Telephone, DateAndTime, Status, Description) VALUES (@CustomerID, @CallID, @CustomerName, @Telephone, @DateAndTime, @Status, @Description)";
            SqlConnection conn = ConnectionString();
            SqlCommand cmd = new SqlCommand(sql, conn);
            cmd.Connection = conn;
            cmd.Parameters.AddWithValue("CustomerID", customerID_cb.Text);
            cmd.Parameters.AddWithValue("CallID", (CallListBox.Items.Count + 1));
            cmd.Parameters.AddWithValue("DateAndTime", DateTime.Now);
            cmd.Parameters.AddWithValue("Status", status_cb.Text);
            cmd.Parameters.AddWithValue("Description", description_txt.Text);
            conn.Open();
            cmd.ExecuteNonQuery();
            conn.Close();

            MessageBox.Show("Record Created");
            this.Close();
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.ToString());
        }
    }

您现在可能知道,简单地将一个增加到列表中的项目数是一种笨拙的做事方式,并且在删除记录并且您想要添加更多内容后会导致问题。我想知道是否有办法按照更好的方式做我想做的事情:)

谢谢!

2 个答案:

答案 0 :(得分:2)

CallID设置为自动增量

ALTER TABLE Records AUTO_INCREMENT=1

然后更改您的insert语句,使其排除字段

INSERT Records (CustomerID, CustomerName, Telephone, DateAndTime, Status, Description) VALUES (@CustomerID, @CustomerName, @Telephone, @DateAndTime, @Status, @Description)

数据库将为添加的任何后续行处理CallID字段的值。

答案 1 :(得分:1)

以这种方式继续(如果你不在数据库中使用自动增量,那么它可能对你有用。)

将您的上一个值绑定到标签或文本框中,

SqlConnection con = new SqlConnection("Your Connection String");
con.Open();
SqlCommand cmd = new SqlCommand("Select Max(CallID) from Yourtablename",con);    
SQlDataReader dr = cmd.ExecuteReader();
while(dr.Read())
{
    Label1.Text = dr.GetInt32(0).ToString();
}
con.Close();

在上面的代码中改变如下,

cmd.Parameters.AddWithValue("CallID", Convert.ToInt32(Label1.Text));

将数据类型设置为CallID列的int。

请告诉我更多问题。