当我将这些数字用单引号括起来时,我的程序导致错误
string sql1 = "( 11111111111111, 222222222222 )";
到一个字符串变量中并在 SQL 语句中使用该变量。
我正在使用AND COLUMN_NAME IN ( '" + sql1 + "' )
.
我收到以下错误:
用户代码未处理 SQL 异常:“11111111”附近的语法不正确或“(”附近的语法不正确。
我将在 SQL 适配器中使用该查询并使用 Fill 命令来填充 DataTable。
如果我使用方法DoQuotes
而不是字符串变量将单引号替换为 2 个单引号,则不会出错,但生成的 CSV 文件没有数据。
我的程序生成一个 CSV 文件报告。
SQL 代码:AND CARD_NMBR IN ( '" + DoQuotes(sql1) + "' ) ";
哪个是
public static string DoQuotes(string sql)
{
if (sql == null)
return "";
else
return sql.Replace("'", "''");
}
即使我切换到在字符串变量或 SQL 语句本身中删除和添加括号,它也会产生错误。代码:(string sql1 = " '22222222222222', '333333333333333333' ";
无括号)
这是我的更多代码。
public DataTable GetData()
{
var dataTable = new DataTable();
SqlConnection conn = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["asccendConnectionString"].ConnectionString);
conn.Open();
string sql1 = "( '111111111111', '2222222222222' )";
string query = " select bla bla bla from bla where colum_name = abc AND Card_NBR IN ( '"+sql1+"' );
SqlCommand cmd = new SqlCommand(query, conn);
DataTable t1 = new DataTable();
using (SqlDataAdapter a = new SqlDataAdapter(cmd))
{
a.Fill(t1); //here it errors (see the picture above with link)
}
return t1;
///below here is fine, no errors
protected void btnGenerateReport_Click(object sender, EventArgs e)
{
var dataTable = GetData();
StringBuilder builder = new StringBuilder();
List<string> columnNames = new List<string>();
List<string> rows = new List<string>();
StringBuilder builderColumn = new StringBuilder();
foreach (DataColumn column in dataTable.Columns)
{
columnNames.Add(column.ColumnName);
}
builder.Append(string.Join(",", columnNames.ToArray())).Append("\n");
foreach (DataRow row in dataTable.Rows)
{
List<string> currentRow = new List<string>();
foreach (DataColumn column in dataTable.Columns)
{
object item = row[column];
if (column.Ordinal == 3)
currentRow.Add("'" + item.ToString());
else
currentRow.Add(item.ToString());
}
rows.Add(string.Join(",", currentRow.ToArray()));
}
builder.Append(string.Join("\n", rows.ToArray()));
Response.Clear();
Response.ContentType = "text/csv";
Response.AddHeader("Content-Disposition", "attachment;filename=ACTIVATION_REPORT.csv");
Response.Write(builder.ToString());
Response.End();
}