string date = p_text_data.Text;
string sql = @"INSERT INTO Warehouse (title,count,price,date) ";
try
{
using (SqlConnection connection = ConnectToDataBase.GetConnection())
{
SqlCommand command = new SqlCommand(sql, connection);
for (int i = 0; i < mdc.Count; i++)
{
sql += "SELECT @title" + i + ",@count" + i + ",@price" + i + ",@date" + i + " ";
command.Parameters.AddWithValue("@title" + i, mdc[i].Title);
command.Parameters.AddWithValue("@count" + i, mdc[i].Count);
command.Parameters.AddWithValue("@price" + i, mdc[i].Price);
command.Parameters.AddWithValue("@date" + i, Conver_Data(date));
if (mdc.Count-1 != i)
sql += "UNION ALL ";
}
sql += " ;";
connection.Open();// *sql
string id_Partner = command.ExecuteScalar().ToString();
}
}
catch (SqlException se)
{
MessageBox.Show(se.Message);
}
* sql =“INSERT INTO仓库(标题,计数,价格,日期)SELECT @ title0,@ count0,@ price0,@ date0 UNION ALL SELECT @ title1,@ count1,@ price1,@ date1;”
然后他飞了一个例外
')'
附近的语法不正确
澄清 - 计数 - 整数,价格 - 双倍,日期 - 日期
我做错了什么?
编辑: 表
CREATE TABLE [dbo].[Warehouse] (
[ID] int IDENTITY(1, 1) NOT NULL,
[title] char(30) COLLATE Cyrillic_General_CI_AS NULL,
[count] int NULL,
[price] float NULL,
[date] datetime NULL,
CONSTRAINT [PK__Warehous__3214EC277F60ED59] PRIMARY KEY CLUSTERED ([ID])
)
ON [PRIMARY]
GO
我用过 SQL Server 2008
答案 0 :(得分:3)
问题是你永远不会在“)”之后用任何内容更新command
对象的SQL命令文本。仅仅因为您更新sql
变量并不意味着SqlCommand
对象将会看到该更新。
(您将遇到的另一个问题是您没有从此查询中返回任何内容,因此您将无法使用ExecuteScalar()
。)
请改为尝试:
string date = p_text_data.Text;
string sql = @"INSERT INTO Warehouse (title,count,price,date) ";
try
{
using (SqlConnection connection = ConnectToDataBase.GetConnection())
{
SqlCommand command = new SqlCommand(sql, connection);
for (int i = 0; i < mdc.Count; i++)
{
sql += "SELECT @title" + i + ",@count" + i + ",@price" + i + ",@date" + i + " ";
command.Parameters.AddWithValue("@title" + i, mdc[i].Title);
command.Parameters.AddWithValue("@count" + i, mdc[i].Count);
command.Parameters.AddWithValue("@price" + i, mdc[i].Price);
command.Parameters.AddWithValue("@date" + i, Conver_Data(date));
if (mdc.Count-1 != i)
sql += "UNION ALL ";
}
sql += " ;";
command.CommandText = sql; // Set your SQL Command to the whole statement.
connection.Open();// *sql
command.ExecuteNonQuery(); // Execute a query with no return value.
}
}
catch (SqlException se)
{
MessageBox.Show(se.Message);
}
答案 1 :(得分:0)
您正在尝试使用字符串sql
作为引用类型,尽管它是引用类型,但它是一种特殊情况,它的作用类似于值类型。这条线
sql += "SELECT @title" + i + ",@count" + i + ",@price" + i + ",@date" + i + " ";
似乎附加到sql
,但实际上它正在创建一个新字符串,存储在内存中传递给String
的{{1}}的另一个位置。
如果数组很大,可以使用StringBuilder类构建字符串,然后在构建完成后将其分配给SqlCommand
对象,从而获得性能优势。
在SqlCommand
变量中包含完整的SQL后,您需要将其分配到SqlCommand.CommandText
。