2012-09-13 146 views
1

當ID列是主鍵並設置爲自動增量時,如何執行表插入命令?用自動增量主鍵在c#中插入一行到一個sql表中

我已經試過如下:

 using (SqlConnection conn = new SqlConnection(connstring)) 
     { 
      SqlCommand identChange = conn.CreateCommand(); 
      identChange.CommandText = "SET IDENTITY_INSERT table1 ON"; 
      conn.Open(); 
      string commtext = @"Insert INTO table1 (ID, Username) 
         SELECT @ID, @User"; 
      SqlCommand comm = new SqlCommand(commtext, conn); 
      comm.Parameters.AddWithValue("@ID", -1); 
      comm.Parameters.AddWithValue("@User", loggedinuser); 
      identChange.ExecuteNonQuery(); 
      comm.ExecuteNonQuery(); 
      conn.Close(); 
     } 

,但不管是什麼值放入ID(我試過0和-1),它與ID列下的價值創造一個新行。因此,當我嘗試插入下一行時,它給了我一個錯誤,因爲現在我有兩個具有相同ID的行。

+1

是不是一個自動遞增鍵的整個點,你不*有*爲它傳遞一個值? –

+1

你爲什麼要設置'IDENTITY_INSERT'? –

+0

我讀了一個地方,你應該將ID設置爲0來自動增加。但是你是對的,如果你忽略它,它就會起作用。 – Tony

回答

5

如果是自動增量列,則不必提及該列。

string commtext = @"Insert INTO table1 (Username) SELECT @User"; 
SqlCommand comm = new SqlCommand(commtext, conn); 
comm.Parameters.AddWithValue("@User", loggedinuser); 
0

除非您想顯式設置ID,否則不設置IDENTITY_INSERT ON否則使用自動遞增值。

using (SqlConnection conn = new SqlConnection(connstring)) 
    {   
     conn.Open(); 
     string commtext = @"Insert INTO table1 (Username) 
        SELECT @User"; 
     SqlCommand comm = new SqlCommand(commtext, conn); 
     comm.Parameters.AddWithValue("@User", loggedinuser); 
     identChange.ExecuteNonQuery(); 
     comm.ExecuteNonQuery(); 
     conn.Close(); 
    } 
1

你說這樣的事情:

int addUser(string userName) 
{ 
    if (string.IsNullOrWhiteSpace(userName) throw new ArgumentException("invalid user name" , "userName") ; 
    int user_id ; 
    string connectString = GetSomeConnectString() ; 

    using (SqlConnection connection = new SqlConnection(connectString)) 
    using (SqlCommand cmd  = connection.CreateCommand()) 
    { 

    cmd.CommandType = CommandType.Text ; 
    cmd.CommandText = @" 
insert dbo.user (user_name) values (@user_Name) 
select user_id = @@SCOPE_IDENTITY 
" ; 

    cmd.Parameters.AddWithValue("@user_name" , userName) ; 

    connection.Open() ; 
    user_id = (int) cmd.ExecuteScalar() ; 
    connection.Close() ; 
    } 

    return user_id ; 
} 

identity屬性(或自動增量列)的任何列無法在插入指定。您必須指定您正在提供的值的列。任何未提供的列必須可以爲空,具有默認約束或者是自動遞增列。

相關問題