2012-02-29 41 views
0

我想檢查Tbldelivery表中已經存在的「refno」,如果「refno」存在,那麼它將插入「Tbldeliverydetails」中,因爲「refno」是第一個表中的主鍵。我在哪裏檢查條件?檢查條件要插入哪個表

以下是我在C#編寫的代碼:

protected void btndlysave_Click(object sender, EventArgs e) 
{ 
    SqlConnection SqlCon = new SqlConnection("server=(local);Initial Catalog=TestDB;Integrated Security=SSPI;"); 
    try 
    { 
     SqlCon.Open(); 

     SqlCommand cmd = new SqlCommand("insert into Tbldelivery (refno,deliverdate,requestby,projectcode) values 
     (@refno,@deliverdate,@requestby,@projectcode)    WHERE not exists (select refno from Tblinkdelivery where refno = @refno)", SqlCon); 
     cmd.CommandType = CommandType.Text; 

     if (need check here) 

     cmd.Parameters.AddWithValue("@refno", txtdelrefno.Text.Trim()); 
     cmd.Parameters.AddWithValue("@deliverdate", txtdeldate.Text.Trim()); 
     cmd.Parameters.AddWithValue("@requestby", txtdelreq.Text.Trim()); 
     cmd.Parameters.AddWithValue("@projectcode", ddlprojcode.Text.Trim()); 
     } 

     else 
     { 

     SqlCommand cmd2 = new SqlCommand("insert into Tbldeliverdetails (refno,printercode,inkcode,quantity,price,notes) values    (@refno,@printercode,@inkcode,@quantity,@price,@notes)", SqlCon); 
     cmd2.CommandType = CommandType.Text; 

     cmd2.Parameters.AddWithValue("@refno", txtdelrefno.Text.Trim()); 
     cmd2.Parameters.AddWithValue("@printercode", ddldelprcode.Text.Trim()); 
     cmd2.Parameters.AddWithValue("@inkcode", ddlinkcode.Text.Trim()); 
     cmd2.Parameters.AddWithValue("@quantity", txtdelqty.Text.Trim()); 
     cmd2.Parameters.AddWithValue("@price", txtdelprice.Text.Trim()); 
     cmd2.Parameters.AddWithValue("@notes", txtdelnotes.Text.Trim()); 

     int val1 = cmd.ExecuteNonQuery(); 
     int val2 = cmd2.ExecuteNonQuery(); 
    } 
    finally 
    { 
     SqlCon.Close(); 
    } 
} 
+1

,這實際上編譯?看起來你註釋了一個if,除非我錯了,否則在C#中沒有try/else/finally塊這樣的事情。 – Zoidberg 2012-02-29 12:02:55

+0

嘗試 var da = new SqlDataAdapter(「select refname from Tblinkdelivery where refno ='」+ txtdelrefno.Text +「'」,SqlCon); var dt = new DataTable(); da.Fill(dt); if(dt.Rows.Count == 0) {All Codes} – Hari 2012-04-29 14:17:33

+0

我計算表中的行數。如果該行爲零,則「if」內的代碼將執行另一個明智的代碼「else」被執行。它運行Mr.Zoidberg – Hari 2012-04-29 14:21:11

回答

0

您查詢表,看看它是否存在。

using (SqlConnection connection = new SqlConnection(connectionString)) 
{ 
    connection.Open(); 

    SqlCommand sqlCommand = 
     new SqlCommand("SELECT * FROM dbo.Tbldelivery WHERE [email protected]", 
         connection); 

    sqlCommand.Parameters.Add("@refno", System.Data.SqlDbType.VarChar); 
    sqlCommand.Parameters["@refno"].Value = refnoValue; 

    SqlDataReader reader = sqlCommand.ExecuteReader(); 
    reader.Read(); 
    if (reader.HasRows) 
    { 
    // refno exists 
    } 
    else 
    { 
    // refno does not exist 
    } 
} 
1

我覺得首先你需要安排你的代碼。 寫入button click事件內的所有內容都不是很好。如果你可以分開業務邏輯並分開放置,那更好。 嘗試這樣的事情。 您可以創建處理數據訪問的類Data Access。 在你的數據訪問類

public SqlConnection OpenConnection() 
     { 
      try 
      { 
       var conn = new SqlConnection(「xxx」); 
       conn.Open(); 
       return conn; 
      } 
      catch (Exception ex) 
      { 
       //log the exception 
       return null; 
      } 
     } 

YourFunction(parameters) 
{ 
    var conn = OpenConnection(); 
    if(conn != null) 
    { 
     //your code 
     // you can do something similar as JeremyK explained here 
    } 

} 

而在你點擊鏈接

protected void btndlysave_Click(object sender, EventArgs e) 
{ 
    //CHECK THE PARAMETERS AND PASS 
    //DataAccess. YourFunction(parameters) 
}