2017-07-28 96 views
1

我試圖簡單地將值插入SQL表中。數據庫中的ID不能是AUTO_INCREMENT,所以我使用MAX和+1。該代碼不僅不會生成新的ID,而且不會將任何東西插入表中。Visual C#SQL語句不會插入到數據庫中

即使在調試器沒有錯誤或警告,它只是沒有顯示在數據庫本身..

這裏是我的代碼:

using System; 
using System.Collections.Generic; 
using System.Data; 
using System.Data.SqlClient; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Windows; 
using System.ComponentModel; 
using System.Drawing; 
using System.Text; 


namespace WebApplication2 
{ 
public partial class WebForm1 : System.Web.UI.Page 
{ 

    protected void Page_Load(object sender, EventArgs e) 
    { 

    } 

    protected void ButtonClick(object sender, EventArgs e){ 



     using (var sqlConnection1 = new SqlConnection("Data 
Source=SERVER; Initial Catalog = Metal; Integrated 
Security = True")) 
     { 
      SqlDataAdapter cmd = new SqlDataAdapter(); 

      using (var insertData = new SqlCommand("INSERT INTO ApptIn 
(CONTROLNUMBER, CARRIERNAME, EXPECTEDNUMOFPIECES, EXPECTEDWEIGHT) VALUES 
(@carrierSelectInput, 
@pieceCountInput, @weightinput)") 
      { 



       SqlCommand generateApptNum = new SqlCommand(); 
       View appNumView = new View(); 

       insertData.Connection = sqlConnection1; 

       string carrierSelectInput = DropDownList1.Text; 
       string pieceCountInput = TextBox1.Text; 
       string weightInput = TextBox2.Text; 

       insertData.Parameters.Add("@carrierSelectInput", 
carrierSelectInput.VarChar); 
       insertData.Parameters.Add("@pieceCountInput", 
pieceCountInput.Int); 
       insertData.Parameters.Add("@weightInput", 
weightInput.Int); 

       cmd.InsertCommand = insertData; 

       sqlConnection1.Open(); 
       insertData.ExecuteNonQuery(); 
       generateApptNum.ExecuteNonQuery(); 
       sqlConnection1.Close(); 
      } 
     } 

     } 
    } 
} 

編輯:我曾嘗試運行SQL進入數據庫,它給了一個錯誤,所以我改變了它(代碼更新),但它放在ID = 0 ...

+1

當子查詢返回null時,max可能爲空。嘗試'COALESCE((SELECT MAX(CONTROLNUMBER)FROM ApptIn),0)+ 1'。另外,我懷疑INSERT的VALUES子句中的子查詢是否是有效的語法?第二個命令generateApptNum是做什麼的? – dlatikay

+0

選擇ID列並使進行自動遞增。 – Musab

+0

我嘗試了COALESCE,但沒有改變。 'generateApptNum'是我在解決這個問題時添加的內容。它只會返回新的CONTROLNUMBER供用戶查看。 – Pandasai

回答

2

我知道你已經承諾你的計劃,但是,我覺得我必須指出,由於在查詢中選擇了最大id值,插入語句h因爲潛在的可能比普通插入物慢得多。

如果您打算插入大量行或創建一個API以供在整個代碼中使用,我強烈建議將列定義調整爲標識列或考慮使用序列來生成標識。

1

問題可能在於您需要在insertData命令上指定CommandType爲CommandType.Text。原始代碼中有很多正在聲明的多個sqlcommands。我認爲代碼可以簡化爲:

protected void ButtonClick(object sender, EventArgs e) 
{ 
    using (var sqlConnection1 = new SqlConnection("data source=testServer;initial catalog=testCat;integrated security=True;")) 
    using (var insertData = new SqlCommand("insert into tempExample (id, code, description) values ((select max(coalesce(id, 1)) from tempExample)+1, @code, @description)", sqlConnection1)) 
    { 
     insertData.CommandType = CommandType.Text; 
     insertData.Parameters.AddWithValue("@code", "Testing4"); 
     insertData.Parameters.AddWithValue("@description", "Testing3"); 

     sqlConnection1.Open(); 
     insertData.ExecuteNonQuery(); 
     sqlConnection1.Close(); 
    } 
} 

更新 - 我更改了上面的代碼以反映我的本地計算機上的工作測試。請注意,連接字符串格式不同(缺少空格)。

+0

我試過了,但無濟於事 – Pandasai

+0

您是否檢查過連接字符串以確保其正確的服務器? –

+0

是的,我已經得到它從數據庫中的每一行給這個結果 – Pandasai