Почему использование двух переменных приводит к возврату моего запроса без строки

У меня есть следующая страница asp.net, в которой есть кнопка для каждой строки, которую создает ретранслятор:

<asp:Repeater runat="server" ID="rptContent" OnItemCommand="btnGeneratePDF_Click"> <HeaderTemplate> <table border="0" style="width: 95%;"> <tr> <td style="width: 25%;">Name</td> <td style="width: 25%;">Last Four SSN #</td> <td style="width: 25%;">PDF Generator</td> </tr> </HeaderTemplate> <ItemTemplate> <tr> <td><%# Eval("name").ToString() %></td> <td><%# Eval("ssn3").ToString() %></td> <td><asp:Button ID="btnGeneratePDF" runat="server" Text="Generate PDF" CommandArgument='<%# Eval("name").ToString() + ", " + Eval("ssn3").ToString() %>' /></td> </tr> </ItemTemplate> <FooterTemplate> </table> </FooterTemplate> </asp:Repeater> 

Мой код выглядит следующим образом:

 protected void btnGeneratePDF_Click(object sender, CommandEventArgs e) { string[] ar = e.CommandArgument.ToString().Split(','); this.writeData(ar[0], ar[1]); } public void writeData(string k, string c) { Conn = new SqlConnection(cString); Conn.Open(); //MessageBox.Show(k); //MessageBox.Show(c); nameE = txtName.Text; var pdfPath = Path.Combine(Server.MapPath("~/PDFTemplates/fw9.pdf")); // Get the form fields for this PDF and fill them in! var formFieldMap = PDFHelper.GetFormFieldNames(pdfPath); formFieldMap["topmostSubform[0].Page1[0].f1_01_0_[0]"] = k; //sqlCode = "SELECT * FROM [db].[dbo].[TablePDFTest] WHERE [name] = '" + nameE + "'"; sqlCode = "SELECT * FROM [db].[dbo].[TablePDFTest] WHERE [name] = '" + k + "' AND [ssn3] = '" + c + "'"; //MessageBox.Show("" + sqlCode.ToString()); using (SqlCommand command = new SqlCommand(sqlCode, Conn)) { command.CommandType = CommandType.Text; using (reader = command.ExecuteReader()) { if (reader.HasRows) { if (reader.Read()) { formFieldMap["topmostSubform[0].Page1[0].f1_02_0_[0]"] = reader.GetValue(1).ToString(); formFieldMap["topmostSubform[0].Page1[0].f1_04_0_[0]"] = reader.GetValue(2).ToString(); formFieldMap["topmostSubform[0].Page1[0].f1_05_0_[0]"] = reader.GetValue(3).ToString(); formFieldMap["topmostSubform[0].Page1[0].f1_07_0_[0]"] = reader.GetValue(4).ToString(); formFieldMap["topmostSubform[0].Page1[0].social[0].TextField1[0]"] = reader.GetValue(5).ToString(); formFieldMap["topmostSubform[0].Page1[0].social[0].TextField2[0]"] = reader.GetValue(6).ToString(); formFieldMap["topmostSubform[0].Page1[0].social[0].TextField2[1]"] = reader.GetValue(7).ToString(); formFieldMap["topmostSubform[0].Page1[0].social[0].TextField2[2]"] = reader.GetValue(8).ToString(); formFieldMap["topmostSubform[0].Page1[0].social[0].TextField2[3]"] = reader.GetValue(9).ToString(); } } } } // Requester's name and address (hard-coded) formFieldMap["topmostSubform[0].Page1[0].f1_06_0_[0]"] = "Medical Group\n27 West Ave\nPurchase, NY 10577"; var pdfContents = PDFHelper.GeneratePDF(pdfPath, formFieldMap); PDFHelper.ReturnPDF(pdfContents, "Completed-W9.pdf"); } 

Если мой

sqlCodesqlCode = "SELECT * FROM [DSPCONTENT01].[dbo].[TablePDFTest] WHERE [name] = '" + k + "'"; //AND [ssn3] = '" + c + "'"; sqlCode = "SELECT * FROM [DSPCONTENT01].[dbo].[TablePDFTest] WHERE [name] = '" + k + "'"; //AND [ssn3] = '" + c + "'"; он отлично работает для formFieldMap

но если мой

sqlCodesqlCode = "SELECT * FROM [DSPCONTENT01].[dbo].[TablePDFTest] WHERE [name] = '" + k + "' AND [ssn3] = '" + c + "'"; formFieldMap работает неправильно.

Это пример того, что показывает ретранслятор:

введите описание изображения здесь

Как я могу это исправить?

ОБНОВЛЕНИЕ :

Я сделал тест с MessageBox чтобы отобразить значение, используя запрос с обеих переменных:

 public void writeData(string k, string c) { Conn = new SqlConnection(cString); Conn.Open(); //MessageBox.Show(k); //MessageBox.Show(c); nameE = txtName.Text; var pdfPath = Path.Combine(Server.MapPath("~/PDFTemplates/fw9.pdf")); // Get the form fields for this PDF and fill them in! var formFieldMap = PDFHelper.GetFormFieldNames(pdfPath); formFieldMap["topmostSubform[0].Page1[0].f1_01_0_[0]"] = k; sqlCode = "SELECT * FROM [db].[dbo].[TablePDFTest] WHERE [name] = '" + k + "' AND [ssn3] = '" + c + "'"; //MessageBox.Show("" + sqlCode.ToString()); using (SqlCommand command = new SqlCommand(sqlCode, Conn)) { command.CommandType = CommandType.Text; using (reader = command.ExecuteReader()) { if (reader.HasRows) { if (reader.Read()) { MessageBox.Show(reader.GetValue(1).ToString()); MessageBox.Show(reader.GetValue(2).ToString()); MessageBox.Show(reader.GetValue(3).ToString()); MessageBox.Show(reader.GetValue(4).ToString()); MessageBox.Show(reader.GetValue(5).ToString()); MessageBox.Show(reader.GetValue(6).ToString()); MessageBox.Show(reader.GetValue(7).ToString()); MessageBox.Show(reader.GetValue(8).ToString()); MessageBox.Show(reader.GetValue(9).ToString()); /*formFieldMap["topmostSubform[0].Page1[0].f1_02_0_[0]"] = reader.GetValue(1).ToString(); formFieldMap["topmostSubform[0].Page1[0].f1_04_0_[0]"] = reader.GetValue(2).ToString(); formFieldMap["topmostSubform[0].Page1[0].f1_05_0_[0]"] = reader.GetValue(3).ToString(); formFieldMap["topmostSubform[0].Page1[0].f1_07_0_[0]"] = reader.GetValue(4).ToString(); formFieldMap["topmostSubform[0].Page1[0].social[0].TextField1[0]"] = reader.GetValue(5).ToString(); formFieldMap["topmostSubform[0].Page1[0].social[0].TextField2[0]"] = reader.GetValue(6).ToString(); formFieldMap["topmostSubform[0].Page1[0].social[0].TextField2[1]"] = reader.GetValue(7).ToString(); formFieldMap["topmostSubform[0].Page1[0].social[0].TextField2[2]"] = reader.GetValue(8).ToString(); formFieldMap["topmostSubform[0].Page1[0].social[0].TextField2[3]"] = reader.GetValue(9).ToString();*/ } } } } // Requester's name and address (hard-coded) /*formFieldMap["topmostSubform[0].Page1[0].f1_06_0_[0]"] = "Medical Group\n27 West Ave\nPurchase, NY 10577"; var pdfContents = PDFHelper.GeneratePDF(pdfPath, formFieldMap); PDFHelper.ReturnPDF(pdfContents, "Completed-W9.pdf");*/ } 

Когда я нажимаю кнопку, сообщение больше не отображается, ничего не происходит.

Каков тип данных ssn3 в SQL? Вы передаете c как строковый литерал. Это то, на что нужно смотреть. Возможно, просто попробуйте удалить одинарные кавычки вокруг вашего значения для c (если оно целое, например).

Кроме того, что происходит, когда вы вводите запрос в анализатор запросов с некоторыми тестовыми данными для предложения WHERE? Знаете ли вы, должны ли быть строки, соответствующие обоим значениям?

Может быть, вы должны использовать некоторую систему ORM, которая упростит вашу базу данных. Это также поможет вам избежать некоторых SQL-инъекций, которые вы уже сделали в своем коде.

Попробуйте google Fluent NHibernate