2015-08-08 27 views
1

我寫了這個代碼插入一行到表:如何在SQL命令中提交插入時讀取行數據?

SqlConnection TITLEconnection = new SqlConnection(conn); 
SqlCommand prikaz = new SqlCommand("INSERT INTO Customer_Care_Database_Analysis_TITLE(sharhe_amaliyat,az_tarix,ta_tarix,code_faaliyat,name_faaliyat) values(@sharhe_amaliyat,@az_tarix,@ta_tarix,@code_faaliyat,@name_faaliyat)",TITLEconnection); 
prikaz.Parameters.AddWithValue("@sharhe_amaliyat", sharhe_amaliyat); 
prikaz.Parameters.AddWithValue("@az_tarix", az_tarix); 
prikaz.Parameters.AddWithValue("@ta_tarix", ta_tarix); 
//prikaz.Parameters.AddWithValue("@ta_tarix", ta_tarix); 
prikaz.Parameters.AddWithValue("@code_faaliyat", code_faaliyat); 
prikaz.Parameters.AddWithValue("@name_faaliyat", name_faaliyat); 
TITLEconnection.Open(); 
prikaz.ExecuteNonQuery(); 
TITLEconnection.Close(); 

但我想插入了行,然後讀取插入的列。例如插入「A」字符code_faaliyat列,之後讀code_faaliyat字符「A」,我該如何解決呢?

既然你利用 ExecuteNonQuery()提交
+0

是否要讀取code_faaliyat列中最近插入的值?您已經將其作爲傳遞到您的方法的參數。我錯過了什麼? – DarkKnight

+0

是的我的朋友,我想要閱讀最近插入的值。 –

+0

桌子上是否有自動識別欄? – DarkKnight

回答

0

,你只打算接收得到了插入的行數。

相反,您應該考慮使用ExecuteScalar讓它返回插入行的標識值,然後在ExecuteReader內執行select語句來讀取插入的數據。我建議在上面鏈接的頁面上查看示例,以便在代碼中使用和try/catch塊作爲更好的練習。

+0

請發佈您的代碼,不要link.thanks。 –

+0

這是直接連接到任一命令的MSDN文檔的鏈接。另外,從最初的問題來看,主鍵是什麼還不清楚,所以我不能輕易提供ExecuteReader命令的例子。 – Xaniff

+0

好的,請等待測試。 –

-3

我寫了這個代碼:

SqlConnection TITLEconnection = new SqlConnection(conn); 
    SqlCommand prikaz = new SqlCommand("INSERT INTO Customer_Care_Database_Analysis_TITLE(sharhe_amaliyat,az_tarix,ta_tarix,code_faaliyat,name_faaliyat) values(@sharhe_amaliyat,@az_tarix,@ta_tarix,@code_faaliyat,@name_faaliyat);SELECT CAST(scope_identity() AS bigint)", TITLEconnection); 
    prikaz.Parameters.AddWithValue("@sharhe_amaliyat", sharhe_amaliyat); 
    prikaz.Parameters.AddWithValue("@az_tarix", az_tarix); 
    prikaz.Parameters.AddWithValue("@ta_tarix", ta_tarix); 
    prikaz.Parameters.AddWithValue("@code_faaliyat", code_faaliyat); 
    prikaz.Parameters.AddWithValue("@name_faaliyat", name_faaliyat); 
    TITLEconnection.Open(); 

    id = (Int64)prikaz.ExecuteScalar(); 

    TITLEconnection.Close(); 

和它的作品。

1

改變插入的語句,然後使用:

Int32 newId = (Int32) myCommand.ExecuteScalar(); 

試試這個:

string insertSql = 
    "INSERT INTO Customer_Care_Database_Analysis_TITLE(sharhe_amaliyat,az_tarix,ta_tarix,code_faaliyat,name_faaliyat) OUTPUT INSERTED.ID VALUES(@sharhe_amaliyat,@az_tarix,@ta_tarix,@code_faaliyat,@name_faaliyat)"; 

using (SqlConnection TITLEconnection = new SqlConnection(conn))) 
{ 
    SqlCommand prikaz = new SqlCommand(insertSql, TITLEconnection); 

    rikaz.Parameters.AddWithValue("@sharhe_amaliyat", sharhe_amaliyat); 
    prikaz.Parameters.AddWithValue("@az_tarix", az_tarix); 
    prikaz.Parameters.AddWithValue("@ta_tarix", ta_tarix); 
    prikaz.Parameters.AddWithValue("@ta_tarix", ta_tarix); 
    prikaz.Parameters.AddWithValue("@code_faaliyat", code_faaliyat); 
    prikaz.Parameters.AddWithValue("@name_faaliyat", name_faaliyat); 

    TITLEconnection.Open(); 
    prikaz.ExecuteNonQuery(); 

    Int32 newId = (Int32) prikaz.ExecuteScalar(); 

    TITLEconnection.Close(); 
} 
1

如果目標表沒有觸發器,那麼我會用OUTPUT clause這樣的:

代替

INSERT dbo.Customer_Care_Database_Analysis_TITLE (sharhe_amaliyat, ...) 
VALUES (11, ...) 

我會用

INSERT dbo.Customer_Care_Database_Analysis_TITLE (sharhe_amaliyat, ...) 
-- OUTPUT inserted.* or 
OUTPUT inserted.sharhe_amaliyat, .... 
VALUES (11,...) 

ExecuteQuery方法。

注:

  1. 你應該和模式前綴你的表名:中dbo.Customer_Care_Database_Analysis_TITLE代替Customer_Care_Database_Analysis_TITLE

  2. 你應該定義主鍵。