在 Web 表单应用程序中出现错误`:'Smith' 附近的语法不正确'`

问题描述 投票:0回答:0

目标:

用户可以从下拉列表中选择一个名称,用户详细信息将显示在带有两个链接按钮的 GridView 中,一个是“已批准”,另一个是“下载”

要获取此数据,我使用以下代码:

private void BindStaffTrainingDropDown()
{
    SqlConnection con = new SqlConnection(strTrainingApprove);
    string com = "SELECT Id, Name FROM tbl_training_forms";
    SqlDataAdapter adpt = new SqlDataAdapter(com, con);
    DataTable dt = new DataTable();
    adpt.Fill(dt);
    dropStaffTrainingName.DataSource = dt;
    dropStaffTrainingName.DataTextField = "Name";
    dropStaffTrainingName.DataBind();
    dropStaffTrainingName.Items.Insert(0, new ListItem("Select Client", ""));
}

然后:

protected void dropStaffTrainingName_SelectedIndexChanged(object sender, EventArgs e)
{
    DataTable dt = new DataTable();
    using (SqlConnection con = new SqlConnection(strTrainingApprove))
    {
        con.Open();
        if (dropStaffTrainingName.SelectedValue != "")
        {
            SqlCommand cmd = new SqlCommand("SELECT * FROM tbl_training_forms WHERE Name =@Name", con);
            cmd.Parameters.AddWithValue("@Name", dropStaffTrainingName.SelectedValue);
            SqlDataAdapter da = new SqlDataAdapter(cmd);
            da.Fill(dt);
        }
        else
        {
            SqlCommand cmd = new SqlCommand("SELECT * FROM tbl_training_forms", con);
            SqlDataAdapter da = new SqlDataAdapter(cmd);
            da.Fill(dt);
        }
        con.Close();
        gridTrainingFormFormApprove.DataSource = dt;
        gridTrainingFormFormApprove.DataBind();
    }
}

然后显示带有相关数据的网格视图。一旦用户点击“已批准”,它就会将“已批准”添加到 SQL 表中,然后导出为 PDF 并通过电子邮件发送。

问题

当用户点击“已批准”时,出现以下错误:

System.Data.SqlClient.SqlException: 'Incorrect syntax near 'Smith'.'

现在在

Name
下的 SQL 表中,我有 John Smith 的条目。

要查询数据库以获取信息,我使用以下代码:

private DataTable GetData(string query)
{
    string conString = ConfigurationManager.ConnectionStrings["FCAConnectionString"].ConnectionString;
    SqlCommand cmd = new SqlCommand(query);
    using (SqlConnection con = new SqlConnection(conString))
    {
        using (SqlDataAdapter sda = new SqlDataAdapter())
        {
            cmd.Connection = con;

            sda.SelectCommand = cmd;
            using (DataTable dt = new DataTable())
            {
                if (dt != null)
                {
                    if (dt.Rows.Count > 0)
                    {
                        sda.Fill(dt);
                    }
                }
                sda.Fill(dt); >== Error is thrown here ==<
                return dt;
            }
        }
    }
}

对于批准链接按钮,我使用以下代码:

protected void lnkApprove_Click(object sender, EventArgs e)
{
    DataRow dr = GetData("SELECT [*] FROM [tbl_training_forms] WHERE Id = " + dropStaffTrainingName.SelectedValue).Rows[0]; ;
    Document pdfDoc = new Document(PageSize.A4, 10f, 10f, 10f, 0f);
    using (MemoryStream memoryStream = new MemoryStream())
    {
        PdfWriter writer = PdfWriter.GetInstance(pdfDoc, memoryStream);
        pdfDoc.Open();

        string imageURL = Server.MapPath(".") + "../../Assets/img/PDF_Header.png";
        iTextSharp.text.Image jpg = iTextSharp.text.Image.GetInstance(imageURL);
        jpg.ScaleToFit(1000f, 113f);
        jpg.SpacingBefore = 10f;
        jpg.SpacingAfter = 1f;
        jpg.Alignment = Element.ALIGN_CENTER;
        Font FONT = new Font(Font.TIMES_ROMAN, 12, Font.BOLD);

        Paragraph par1 = new Paragraph("Staff Training Request - " + dr["Name"], FONT);
        par1.SpacingAfter = 4f;
        par1.SpacingBefore = 5f;
        par1.Alignment = Element.ALIGN_CENTER;

        BaseColor color = new BaseColor(System.Drawing.ColorTranslator.FromHtml("#A9A9A9"));
        DrawLine(writer, 25f, pdfDoc.Top - 120f, pdfDoc.PageSize.Width - 25f, pdfDoc.Top - 120f, color);

        PdfPTable parUserDetails = new PdfPTable(1);
        parUserDetails.AddCell(PhraseCell(new Phrase("User Details", FontFactory.GetFont("Arial", 10, Font.BOLD, BaseColor.Black)), PdfPCell.ALIGN_LEFT));
        parUserDetails.SpacingBefore = 10f;
        parUserDetails.SpacingAfter = 5f;

        PdfPTable tableTraineeName = new PdfPTable(2);
        tableTraineeName.AddCell(PhraseCell(new Phrase("Name:", FontFactory.GetFont("Arial", 8, Font.BOLD, BaseColor.Black)), PdfPCell.ALIGN_LEFT));
        tableTraineeName.AddCell(PhraseCell(new Phrase(dr["Name"].ToString(), FontFactory.GetFont("Arial", 8, Font.NORMAL, BaseColor.Black)), PdfPCell.ALIGN_LEFT));
        tableTraineeName.SpacingAfter = 2f;
        tableTraineeName.SpacingBefore = 2f;

......

我看过各种解决方案,但似乎没有任何帮助。

我错过了什么或做错了什么?

谢谢

c# webforms
© www.soinside.com 2019 - 2024. All rights reserved.