目标:
用户可以从下拉列表中选择一个名称,用户详细信息将显示在带有两个链接按钮的 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;
......
我看过各种解决方案,但似乎没有任何帮助。
我错过了什么或做错了什么?
谢谢