ここにあるものよりも多くの列がありますが、主キー列 TrackingID (nchar[10]) をテストとして投稿しようとしているだけです。それを機能させることができれば、取得できます残りは仕事に。私は、同様のクエリを作成して完全に実行する Windows フォーム アプリケーションを持っています。それは接続文字列ですか、それともSQLクエリですか? テーブル名は Full です。合計 23 の列がありますが、唯一の主キーはトラッキング ID であり、null にすることはできません。いずれの場合も、これらのクエリは OnClick ボタン イベントです。ご覧のとおり、いくつかのルートを試しました。SQLインジェクションを防ぐために、これをパラメータ化するように設定したいと考えています。最初に表示されるコードは、(脆弱ではありますが) 一貫して動作する C# の Windows フォーム アプリケーションからのものです。以下に、asp.net コードが表示されます。
private void licensesubmitbutton_Click(object sender, EventArgs e)
{
try
{
System.Data.SqlClient.SqlConnection sqlConnection1 =
new System.Data.SqlClient.SqlConnection("Data Source=data99;Initial Catalog=LicenseInventoryMgr;Integrated Security=True;Connect Timeout=0;Trusted_Connection=Yes");
System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand();
cmd.CommandType = System.Data.CommandType.Text;
cmd.CommandText = "INSERT LIMTable (Software,Host,AssetTag,ActivationDate,LicenseNumber) VALUES ('" + softwarecombobox.Text + "','" + hostnamebox.Text + "','" + assettagcombobox.Text + "','" + dateactivateddatetimepicker.Value.ToString("yyyy-MM-dd") + "','" + licensekeytextbox.Text + "')";
cmd.Connection = sqlConnection1;
sqlConnection1.Open();
cmd.ExecuteNonQuery();
sqlConnection1.Close();
MessageBox.Show("Successfully Submitted!");
}
catch (System.Exception )
{
MessageBox.Show("Submission unsuccessful. Try saving and refreshing first!");
}
}
そして、これが私が試した ASP.NET コードです。
protected void submit_Click(object sender, EventArgs e)
{
try
{
SqlConnection conn = new SqlConnection(@"Data Source=data99;Initial Catalog=LFM_Archive;Integrated Security=True");
string sql = "INSERT INTO Full (TrackingID) values (@TrackingID)";
conn.Open();
SqlCommand cmd = new SqlCommand(sql, conn);
cmd.Parameters.Add("@TrackingID", SqlDbType.NChar);
cmd.Parameters["@TrackingID"].Value = 6789;
cmd.ExecuteNonQuery();
conn.Close();
MailMessage m1 = new MailMessage("y@x.net", "x@x.net");
m1.Subject = "SQL Query Success";
m1.Body = "SQL Query Success :)";
m1.IsBodyHtml = true;
SmtpClient smtp = new SmtpClient();
smtp.Host = "mailserver99";
smtp.EnableSsl = false;
//System.Net.NetworkCredential NetworkCred = new System.Net.NetworkCredential();
//NetworkCred.UserName = "username";
//NetworkCred.Password = "password";
smtp.UseDefaultCredentials = true;
//smtp.Credentials = NetworkCred;
smtp.Port = 25;
smtp.Send(m1);
}
catch
{
MailMessage m2 = new MailMessage("y@x.net", "x@x.net");
m2.Subject = "SQL Query Failed";
m2.Body = "SQL Query Failed :(";
m2.IsBodyHtml = false;
SmtpClient smtp = new SmtpClient();
smtp.Host = "mailserver99";
smtp.EnableSsl = false;
smtp.UseDefaultCredentials = true;
smtp.Port = 25;
smtp.Send(m2);
}
}
最終結果は、クエリの成功または失敗をフォーム ウィンドウに表示し、フォーム ウィンドウからプルしたり、電子メールを送信したりします。テストする必要がなくなったら、メールはフォームがアーカイブに投稿されたという簡単な通知になります。asp.net アプリケーションのコメント付きコードは、それを試したことを意味するだけであり、機能しない場合は、コメントして新しい方法を試しました。
よく見るために例外メッセージを入れてみることをお勧めしました-それはいくつかの助けになります. submitsuccess.Text は、メッセージが表示される場所です。結果は次のとおりです。「キーワード「Full」付近の構文が正しくありません。」
それはそれがクエリのように聞こえます。「Full」はDB内のテーブル名です。
答え たものは次のとおりです。
SqlConnection conn = new SqlConnection(@"Data Source=data99;Initial Catalog=LFM_Archive;Integrated Security=True");
string sql = "INSERT INTO [Full] (TrackingID) values (@TrackingID)";
conn.Open();
SqlCommand cmd = new SqlCommand(sql, conn);
cmd.Parameters.Add("@TrackingID", SqlDbType.NChar, 10);
cmd.Parameters["@TrackingID"].Value = empfirst.Text;
cmd.ExecuteNonQuery();
conn.Close();