2011-01-17 14 views
2

C#の次の挿入クエリを使用してデータベースに複数の列を挿入しようとしていますが、何とかどこかで例外がスローされています。私はちょうどそれを確認し、どのように私は挿入ステートメントを修正することができますか調べる。私は実行時にパラメータに渡されるものを表示する下の画像を持っています。私はこの情報を得るためにブレークポイントを使用しました。パラメータを使用してC#にクエリを挿入する

この1のあなたの専門知識を必要とする...おかげ

if (Page.IsValid) 
     { 
      DateTime exhibitDate = DateTime.Now; 
      int caseid = Convert.ToInt32(CaseIDDropDownList.SelectedItem.Text); 
      string exhibittype = exhibitTypeTextBox.Text.ToString(); 
      string storedloc = storedLocationTextBox.Text.ToString(); 
      string offid = DropDownList1.SelectedItem.Text.ToString(); 
      Stream imgStream = exhibitImageFileUpload.PostedFile.InputStream; 
      int imgLen = exhibitImageFileUpload.PostedFile.ContentLength;     
      byte[] imgBinaryData = new byte[imgLen]; 
      int n = imgStream.Read(imgBinaryData,0,imgLen); 
      try 
      { 
       SqlConnection connections = new SqlConnection(strConn); 
       SqlCommand command = new SqlCommand("INSERT INTO Exhibits (CaseID, ExhibitType, ExhibitImage, DateReceived, StoredLocation, InvestigationStatus, OfficerID, SuspectID, InvestigatorID, ManagerID, AdminID) VALUES (@CaseID, @ExhibitType, @ExhibitImage, @DateReceived, @StoredLocation, @InvestigationStatus, @OfficerID, @SuspectID, @InvestigatorID, @ManagerID, @AdminID)", connections); 

       SqlParameter param0 = new SqlParameter("@CaseID", SqlDbType.Int); 
       param0.Value = caseid; 
       command.Parameters.Add(param0); 

       SqlParameter param1 = new SqlParameter("@ExhibitType", SqlDbType.NText); 
       param1.Value = exhibittype; 
       command.Parameters.Add(param1); 

       SqlParameter param2 = new SqlParameter("@ExhibitImage", SqlDbType.Image); 
       param2.Value = imgBinaryData; 
       command.Parameters.Add(param2); 

       SqlParameter param3 = new SqlParameter("@DateReceived", SqlDbType.SmallDateTime); 
       param3.Value = exhibitDate; 
       command.Parameters.Add(param3); 

       SqlParameter param4 = new SqlParameter("@StoredLocation", SqlDbType.NText); 
       param4.Value = storedloc; 
       command.Parameters.Add(param4); 

       SqlParameter param5 = new SqlParameter("@InvestigationStatus", SqlDbType.VarChar, 50); 
       param5.Value = ""; 
       command.Parameters.Add(param5); 

       SqlParameter param6 = new SqlParameter("@OfficerID", SqlDbType.NChar, 10); 
       param6.Value = offid; 
       command.Parameters.Add(param6); 

       SqlParameter param7 = new SqlParameter("@SuspectID", SqlDbType.NChar, 10); 
       param7.Value = null; 
       command.Parameters.Add(param7); 

       SqlParameter param8 = new SqlParameter("@InvestigatorID", SqlDbType.NChar, 10); 
       param8.Value = null; 
       command.Parameters.Add(param8); 

       SqlParameter param9 = new SqlParameter("@ManagerID", SqlDbType.NChar, 10); 
       param9.Value = null; 
       command.Parameters.Add(param9); 

       SqlParameter param10 = new SqlParameter("@AdminID", SqlDbType.NChar, 10); 
       param10.Value = adminID; 
       command.Parameters.Add(param10); 

       connections.Open(); 
       int numRowsAffected = command.ExecuteNonQuery(); 
       connections.Close(); 

       if (numRowsAffected != 0) 
       { 
        Response.Write("<BR>Rows Inserted successfully"); 
        CaseIDDropDownList.ClearSelection(); 
        exhibitTypeTextBox.Text = null; 
        storedLocationTextBox.Text = null; 
        DropDownList1.ClearSelection(); 
       } 
       else 
       { 
        Response.Write("<BR>An error occurred uploading the image"); 
       } 
      } 
      catch (Exception ex) 
      { 
       string script = "<script>alert('" + ex.Message + "');</script>"; 
      } 

alt text

  • $例外{「パラメータ化クエリ「(@CaseIDを次のように例外はありますint、@ ExhibitType ntext、@ ExhibitImage image、@ DateReceive 'は、指定されていないパラメータ' @SuspectID 'を要求します。 "} System.Exception {System.Data.Sqあなたがはるかに簡単にこれを行うことができます
+2

例外は何ですか? – Femaref

+1

何の例外がありますか?そのメッセージの詳細は大いに役立ちます! –

+1

catchブロック内の例外メッセージは何ですか? – TheGeekYouNeed

答えて

4

あなたのデータベース/パラメータの型のためNULLに渡したい場合は、あなたがこのようなDBNull.Valueを使用する必要があります。

SqlParameter param9 = new SqlParameter("@ManagerID", SqlDbType.NChar, 10); 
param9.Value = DBNull.Value; 
command.Parameters.Add(param9); 

あなたが今nullに何かを設定している、と私はどこにこれを行ってくださいかなりうまくいくはずです。すべてが大丈夫です。

+0

素晴らしい!Marc_s。それは魔法のように働いていた.... :)ありがとう – Selase

0

lClient.SqlException}が、そのようにしてみてください。これは実際に正確な例外を知らなくても、何が起こっているかを修正する場合

if (Page.IsValid) 
     { 
      DateTime exhibitDate = DateTime.Now; 
      int caseid = Convert.ToInt32(CaseIDDropDownList.SelectedItem.Text); 
      string exhibittype = exhibitTypeTextBox.Text.ToString(); 
      string storedloc = storedLocationTextBox.Text.ToString(); 
      string offid = DropDownList1.SelectedItem.Text.ToString(); 
      Stream imgStream = exhibitImageFileUpload.PostedFile.InputStream; 
      int imgLen = exhibitImageFileUpload.PostedFile.ContentLength;     
      byte[] imgBinaryData = new byte[imgLen]; 
      int n = imgStream.Read(imgBinaryData,0,imgLen); 
      try 
      { 
       SqlConnection connections = new SqlConnection(strConn); 
       SqlCommand command = new SqlCommand("INSERT INTO Exhibits (CaseID, ExhibitType, ExhibitImage, DateReceived, StoredLocation, InvestigationStatus, OfficerID, SuspectID, InvestigatorID, ManagerID, AdminID) VALUES (@CaseID, @ExhibitType, @ExhibitImage, @DateReceived, @StoredLocation, @InvestigationStatus, @OfficerID, @SuspectID, @InvestigatorID, @ManagerID, @AdminID)", connections); 
       command.Parameters.AddWithValue("@CaseID", caseid); 
       //and so on for your 10 parameters 




       connections.Open(); 
       int numRowsAffected = command.ExecuteNonQuery(); 
       connections.Close(); 

       if (numRowsAffected != 0) 
       { 
        Response.Write("<BR>Rows Inserted successfully"); 
        CaseIDDropDownList.ClearSelection(); 
        exhibitTypeTextBox.Text = null; 
        storedLocationTextBox.Text = null; 
        DropDownList1.ClearSelection(); 
       } 
       else 
       { 
        Response.Write("<BR>An error occurred uploading the image"); 
       } 
      } 
      catch (Exception ex) 
      { 
       string script = "<script>alert('" + ex.Message + "');</script>"; 


       } 
} 

私はよく分かりません。あなたが実際に多くの助けになる例外を提供できるかどうか。

+1

AddWithValueはvarcharとしてパラメータを送信し、型チェックはしないことに注意してください。これは、すべてのパラメータに対して望ましい動作ではないかもしれません。 – NotMe

+0

@Chris Lively、私はこの事実を知らなかったが、意味がある。 – msarchet

+0

特に画像属性は私が推測すると私もいくつかの整数値を持っています...だからあなたはクリスをお勧めしますか? – Selase

関連する問題