![](/img/trans.png)
[英]System.Data.SqlClient.SqlException: Incorrect syntax near ')'
[英]System.Data.SqlClient.SqlException: 'Incorrect syntax near '…'
這可能是與 SQL 相關的常見問題之一,但是我很難弄清楚問題所在。
我當前的代碼給出了一個錯誤:
System.Data.dll 中出現“System.Data.SqlClient.SqlException”類型的未處理異常“...”附近的語法不正確。
SQL:
CREATE TABLE [dbo].[LTEST] (
[Id] INT NOT NULL,
[YRNRO] INT NULL,
[HAKUNIMI] TEXT NULL,
[NIMIA] TEXT NULL,
[NIMIB] TEXT NULL,
[KAYNTIOS] TEXT NULL,
[POSTIOS] TEXT NULL,
[POSTINRO] TEXT NULL,
PRIMARY KEY CLUSTERED ([Id] ASC)
);
C#:
using (OdbcConnection dbConnection1 = new OdbcConnection(connectionString1))
{
dbConnection1.Open();
OdbcDataAdapter dadapter1 = new OdbcDataAdapter();
dadapter1.SelectCommand = new OdbcCommand(queryString1, dbConnection1);
dadapter1.Fill(t1);
SqlConnection tempDbConnection = new SqlConnection();
tempDbConnection.ConnectionString = @"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\CustomerDatabase.mdf;Integrated Security=True";
tempDbConnection.Open();
string tempSql = "";
for (int i = 0; i < t1.Rows.Count; i++)
{
tempSql = "INSERT INTO LTEST (YRNRO,HAKUNIMI,NIMIA,NIMIB,KAYNTIOS,POSTIOS,POSTINRO) VALUES ('"
+ t1.Rows[i]["YRNRO"].ToString().Trim() + ",'"
+ t1.Rows[i]["HAKUNIMI"].ToString().Trim() + "','"
+ t1.Rows[i]["NIMIA"].ToString().Trim() + "','"
+ t1.Rows[i]["NIMIB"].ToString().Trim() + "','"
+ t1.Rows[i]["KAYNTIOS"].ToString().Trim() + "',"
+ t1.Rows[i]["POSTIOS"].ToString().Trim() + "',"
+ t1.Rows[i]["POSTINRO"].ToString().Trim() + ");'";
SqlCommand tempCommand = new SqlCommand(tempSql, tempDbConnection);
tempCommand.ExecuteNonQuery();
}
}
編輯:
我的路徑也有問題,應該是: C:\Users\...\source\repos\...\...\CustomerDatabase.mdf
正如其他人所提到的,最好嘗試這樣的事情:
var connectionString = @"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\CustomerDatabase.mdf;Integrated Security=True";
string tempSql = "INSERT INTO LTEST (YRNRO,HAKUNIMI,NIMIA,NIMIB,KAYNTIOS,POSTIOS,POSTINRO) VALUES (@YRNRO, @HAKUNIMI, @NIMIA, @NIMIB, @KAYNTIOS, @POSTIOS, @POSTINRO)"
using (SqlConnection connection = new SqlConnection(connectionText))
{
SqlCommand command = new SqlCommand(commandText, connection);
command.Parameters.Add("@YRNRO", SqlDbType.Text);
command.Parameters.Add("@HAKUNIMI", SqlDbType.Text);
command.Parameters.Add("@NIMIA", SqlDbType.Text);
command.Parameters.Add("@NIMIB", SqlDbType.Text);
command.Parameters.Add("@KAYNTIOS", SqlDbType.Text);
command.Parameters.Add("@POSTIOS", SqlDbType.Text);
command.Parameters.Add("@POSTINRO", SqlDbType.Text);
connection.Open();
for (int i = 0; i < t1.Rows.Count; i++)
{
command.Parameters["@YRNRO"].Value = t1.Rows[i]["YRNRO"].ToString().Trim();
command.Parameters["@HAKUNIMI"].Value = t1.Rows[i]["@HAKUNIMI"].ToString().Trim();
command.Parameters["@NIMIA"].Value = t1.Rows[i]["@HAKUNIMI"].ToString().Trim();
command.Parameters["@NIMIB"].Value = t1.Rows[i]["@HAKUNIMI"].ToString().Trim();
command.Parameters["@KAYNTIOS"].Value = t1.Rows[i]["@HAKUNIMI"].ToString().Trim();
command.Parameters["@POSTIOS"].Value = t1.Rows[i]["@HAKUNIMI"].ToString().Trim();
command.Parameters["@POSTINRO"].Value = t1.Rows[i]["@HAKUNIMI"].ToString().Trim();
try
{
command.ExecuteNonQuery();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
connection.Close();
}
要回答您的問題,您在此行缺少單引號:
+ t1.Rows[i]["YRNRO"].ToString().Trim() + ",'"
//change to
+ t1.Rows[i]["YRNRO"].ToString().Trim() + "','"
但作為一個負責任的高級開發人員,我必須告訴您要么使用參數化的 SQL,要么將您的腳本包裝在存儲過程中並傳遞參數。
也許題外話,但為了加快執行速度,生成一個大容量 SQL 腳本,然后一次性執行,而不是在 foreach 循環中執行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.