これらの数値のセットを一重引用符で囲むと、プログラムでエラーが発生します
string sql1 = "( 11111111111111, 222222222222 )";
文字列変数に変換し、その変数を SQL ステートメントで使用します。
を使用していAND COLUMN_NAME IN ( '" + sql1 + "' )
ます。
次のエラーが表示されます。
SQL 例外がユーザー コードによって処理されませんでした: '11111111' 付近の構文が正しくないか、'(' 付近の構文が正しくありません。
そのクエリを SQL アダプターで使用し、Fill コマンドを使用して DataTable に入力します。
文字列変数の代わりにmethod を使用して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();
}