2012-02-29 9 views
0

Tbldeliveryテーブルに既に存在する「refno」をチェックしたい場合「refno」がある場合、「refno」が第1テーブルの主キーであるため「Tbldeliverydetails」に挿入されます。どこで私の状態をチェックしますか?ここで挿入するテーブルの条件を確認する

は、私は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

+0

try { var da = new SqlDataAdapter( "refno = '" + txtdelrefno.Text + "'"、SqlCon)からTblinkdeliveryのrefnoを選択します。 var dt = new DataTable(); da.Fill(dt); if(dt.Rows.Count == 0) {すべてのコード} – Hari

+0

テーブルの行数をカウントします。行がゼロの場合は、「if」内のコードが別の賢明なコードで実行されます。 "else"が実行されます。それはMr.Zoidbergを実行しています – Hari

答えて

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) 
} 
関連する問題