从asp.net插入sql数据库时出现问题

本文关键字:问题 数据库 sql asp net 插入 | 更新日期: 2023-09-27 18:27:59

我有比这里更多的列,但我只是想发布主键列TrackingID(nchar[10])作为测试-如果我能让它发挥作用,我就能让其他列发挥作用。我有一个windows窗体应用程序,它可以进行类似的查询并完美运行,所以考虑到它是C#,我很难理解出了什么问题。是连接字符串还是sql查询?表名为Full。共有23列,但唯一的主键是跟踪ID,不能为空。在所有情况下,这些查询都是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应用程序中的注释代码只意味着我尝试过它,当它不起作用时,我对它进行了注释,并尝试了一种新方法。

有人建议我试着输入一条异常信息,以便更好地了解情况——这对一些人有所帮助。提交成功。文本是信息出现的地方。结果如下:"关键字‘Full’附近的语法不正确。"

这听起来像是一个问题。"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();

从asp.net插入sql数据库时出现问题

问题是FULL在SQL中是一个保留字。请参阅此Technet链接。

要解决您的问题,请在保留关键字上使用括号,如:

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

尝试使用此代码

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

问题是由于FULL是关键字