【发布时间】:2020-07-06 05:10:34
【问题描述】:
目前,我正在开发一个库存系统,该系统将允许客户自定义他们自己的 SQL Server 表。
用户将为其列命名,然后指定他们想要使用的数据类型。在他们对他们的表格感到满意后,他们点击提交表格按钮来创建他们的表格。然后,C# 将通过运行 SQL Server 存储过程为用户创建一个唯一的表。
SqlConnection connection = new SqlConnection(Constants.conn);
connection.Open();
string query = "EXEC CreateTable @TableName='"+ UserAccountInfo.Username + "InventoryTable'";
SqlCommand command = new SqlCommand(query, connection);
command.ExecuteReader();
然后使用 foreach 循环,通过查看堆栈面板“StackTable”子项,遍历添加的每一列(UserTable 类是我的自定义 WPF UserControl),并将 Usertable“Name”和“DataType”的属性分配给字符串数组列表。然后我遍历整个列表并执行第二个存储过程来更改先前创建的表。
我相信这一切都会奏效!!我的问题和问题在于我的存储过程。
List<string[]> list = new List<string[]>();
foreach (UserTable ut in StackTable.Children)
{
string dataType = "";
switch (ut.DataType.Text)
{
case "Text": dataType = "Varchar(100)"; break;
case "Number": dataType = "INT"; break;
case "Boolean": dataType = "Varchar(5)"; break;
}
string[] vs = {"[" + ut.Name.Text + "]", dataType};
list.Add(vs);
}
foreach (string[] s in list)
{
string query2 = "EXEC SelectAllCustomers @Name = '" + s[0] + "', @DataType = '" + s[1] + "';";
SqlCommand command2 = new SqlCommand(query, connection);
command2.ExecuteReader();
}
我的 DATABASE Schema 由名为 InventoryDatabase 的基本数据库组成,在一个名为 LoginInfo 的表中存储用户信息,其余表将是我们在上面创建的表。问题是,我的存储过程抛出语法错误。
【问题讨论】:
-
你不能说
ALTER TABLE @TableName- 请阅读动态SQL 和 SQL注入。 -
是
Stored(不是Storage)。 -
变量不能用来代替对象的名字;无论如何,肯定不是没有动态SQL。但我强烈建议你也不要走这条路,因为很明显你没有注意到 SQL 注入的巨大危险。你在这里的真正目标是什么?
标签: c# sql sql-server wpf