Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何避免插入查询时主键自动递增?_C#_Sql Server - Fatal编程技术网

C# 如何避免插入查询时主键自动递增?

C# 如何避免插入查询时主键自动递增?,c#,sql-server,C#,Sql Server,首先,当有许多项目时,我允许用户在组合框中键入以快速搜索。我想知道如果用户意外按下一个额外的字母,我是否可以停止insert查询,它将导致null,我有try catch块,但它只显示错误消息,但主键跳过一个数字 选择要填充的项目组合框 private void GetProjectID() { newConnection.ConnectionM(); SqlCommand cmd = SqlConnectionOLTP.cn.CreateCommand(); cmd.C

首先,当有许多项目时,我允许用户在组合框中键入以快速搜索。我想知道如果用户意外按下一个额外的字母,我是否可以停止insert查询,它将导致null,我有
try catch
块,但它只显示错误消息,但主键跳过一个数字

选择要填充的项目组合框

private void GetProjectID()
{
    newConnection.ConnectionM();
    SqlCommand cmd = SqlConnectionOLTP.cn.CreateCommand();
    cmd.CommandText = "Select * from Project where ProjectName='" + comboBoxProjectTitle.Text + "' ";
    try
    {
        SqlDataReader reader = cmd.ExecuteReader();
        while(reader.Read())
        {
            ProjectID = reader.GetInt32(0);

        }
        reader.Close();
        SqlConnectionOLTP.cn.Close();
    }
    catch(Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}
插入到数据库:

SqlCommand cmd = SqlConnectionOLTP.cn.CreateCommand();
cmd.CommandText = "Insert into Cost(ProjectID,PropertyID,CostCategoryID,EstimatedAmount) values ('" + ProjectID + "','" + PropertyID + "','" + CostCatID + "'," + "'" + textBoxAmount.Text + "') ";
cmd.ExecuteNonQuery();
SqlConnectionOLTP.cn.Close();
MessageBox.Show("Saved");
SET IDENTITY\u INSERT ON
--使用名称在表中插入
将标识设置为“插入”禁用

在SSM上运行此代码,即sql server management studio

 ALTER TABLE [Project] DROP ProjectID 
   SET IDENTITY_INSERT <Project> OFF
ALTER TABLE[Project]DROP ProjectID
将标识设置为“插入”禁用

严肃地说:永远不要连接输入来生成SQL;这就是“数据库101”-或者至少是“105”(永远是OWASP#1(“A1”)。请使用参数。“但主键跳过一个数字”-即。。。这不是问题;您不应该期望主键都是连续的,在我看来,试图“修复”这个问题是一个非常糟糕的想法——这是解决错误的问题;这里的实际问题是什么?
 ALTER TABLE [Project] DROP ProjectID 
   SET IDENTITY_INSERT <Project> OFF