我正在尝试从另一个表中检索列值并插入另一个表但无法解决它没有错误但无法解决它。出现空列。尝试在t_vrm
t_vrm上的插入语句中插入sql_fix_01
是SQL Server中的varchar
及其车辆注册号(车牌号)
但是返回空列。
private void btnProcess_Click(object sender, EventArgs e)
{
tbl = new DataTable();
tbl.Columns.Add(new DataColumn("ticket_reference", System.Type.GetType("System.String")));
tbl.Columns.Add(new DataColumn("ticket_number", System.Type.GetType("System.String")));
tbl.Columns.Add(new DataColumn("t_vrm", System.Type.GetType("System.String")));
tbl.Columns.Add(new DataColumn("sql_fix_01", System.Type.GetType("System.String")));
tbl.Columns.Add(new DataColumn("sql_fix_02", System.Type.GetType("System.String")));
tbl.Columns.Add(new DataColumn("sql_fix_03", System.Type.GetType("System.String")));
tbl.Columns.Add(new DataColumn("sql_fix_04", System.Type.GetType("System.String")));
SqlConnection myConn = new SqlConnection();
myConn.ConnectionString = stringConn;
SqlCommand myComm = new SqlCommand();
myComm.Connection = myConn;
string[] tempArray = new string[this.textBox1.Lines.Length];
tempArray = this.textBox1.Lines;
if (this.textBox1.Lines.Length == 0)
{
return;
}
myConn.Open();
int ticket_number = -666;
string t_vrm = "";
string sql_fix_01 = "";
string stringDatetime = DateTime.Now.ToString("yyyyMMdd HH:mm:ss");
//string stringDatetime = "20120829 17:00:00";
for (int counter = 0; counter <= tempArray.Length - 1; counter++)
{
sql_fix_01 = "";
t_vrm = "";
ticket_number = -666;
if (tempArray[counter].Trim().Length > 0)
{
try
{
myComm.CommandText = "SELECT t_number, t_vrm FROM tickets WHERE t_reference='" + tempArray[counter] + "'";
ticket_number = (int)myComm.ExecuteScalar();
t_vrm = (string)(myComm.ExecuteScalar()).ToString();
我的错误就在这条路上。( t_vrm )
sql_fix_01 = "INSERT INTO [dvla] ([dvla_system_ref],[dvla_seq_no],[dvla_vrm],[dvla_due],[dvla_sent],[dvla_sent_by],[dvla_batch_no],[dvla_response_date],[dvla_query_destination]) VALUES(" + ticket_number.ToString().Trim() + ", 2 , t_vrm , '" + stringDatetime + "', NULL,'',0, NULL, 'DVLATicketLetter');";
}
catch { }
if (ticket_number != -666)
{
tbl.Rows.Add(tempArray[counter], ticket_number,t_vrm, sql_fix_01, sql_fix_02, sql_fix_03, sql_fix_04);
}
}
}
myConn.Close();
this.dataGridView1.DataSource = tbl;
this.dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;
DataView vwExport = new DataView(tbl);
if (sfd.ShowDialog() == DialogResult.OK)
{
if (sfd.FileName != "")
{
btnProcess.Enabled = false;
Application.DoEvents();
StreamWriter sw = null;
FileStream fs = null;
fs = File.Open(sfd.FileName, FileMode.Create, FileAccess.Write);
sw = new StreamWriter(fs, System.Text.Encoding.UTF8);
sw.WriteLine("USE ICPS");
sw.WriteLine("GO");
sw.WriteLine(" ");
sw.WriteLine("/* Set accounts Hold Status to ''VQ4 rescheduled' */");
sw.WriteLine(" ");
foreach (DataRowView drv in vwExport)
{
sw.WriteLine("/* Ticket Reference: " + drv["ticket_reference"].ToString() + "/" + drv["ticket_number"].ToString() + "/" + drv["t_vrm"].ToString() + "*/");
sw.WriteLine(drv["sql_fix_01"].ToString());
答案 0 :(得分:3)
您无法将ExecuteScalar
用于多个值..
myComm.CommandText = "SELECT t_number, t_vrm
FROM tickets WHERE t_reference='" + tempArray[counter] + "'";
ticket_number = (int)myComm.ExecuteScalar();
t_vrm = (string)(myComm.ExecuteScalar()).ToString();
您需要使用DataReader
代替。
SqlDataReader reader = myComm.ExecuteReader();
// Call Read before accessing data.
while (reader.Read())
{
ticket_number = reader.GetInt32(0);
t_vrm = reader.GetString(1);
}
另外,要重申 @Amber 所说的内容,请查看Bobby Tables
,您真的要避免dynamic SQL
答案 1 :(得分:0)
Should'nt:
...VALUES(" + ticket_number.ToString().Trim() + ", 2 , t_vrm , '" +...
是:
...VALUES(" + ticket_number.ToString().Trim() + ", 2 , " + t_vrm + " , '" +...
您的t_vrm
变量是字符串的一部分。