簡體   English   中英

從asp.net插入sql數據庫的問題

[英]Issues inserting into sql database from asp.net

我的資料欄比這里的要多,但我只是想發布主鍵欄TrackingID(nchar [10])作為測試-如果我能使它起作用,我可以他們其余的工作。 我有一個Windows窗體應用程序,該應用程序可以執行類似的查詢並完美運行,因此,由於它們都是C#,因此我很難理解出了什么問題。 是連接字符串還是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'附近的語法不正確”。

這聽起來像是查詢。 “全”是數據庫中的表名。

回答這是有效的方法:

            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();

問題是FULL是SQL中的保留字。 請參閱此Technet鏈接。

要解決您的問題,請在保留關鍵字上使用方括號,如下所示:

string sql = "INSERT INTO [Full] (TrackingID) values (@TrackingID)";

嘗試使用此代碼

INSERT INTO [Full] (TrackingID) values ('@TrackingID')

問題是由於FULL是關鍵字

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM