C# 如何在asp.net中创建新数据库?

C# 如何在asp.net中创建新数据库?,c#,asp.net,sql-server,C#,Asp.net,Sql Server,我的目标是为用户将添加到网站上的新品牌创建一个新的数据库。我已经创建了一个代码来执行这样的任务,但它给了我这个异常: System.Data.dll中发生“System.Data.SqlClient.SqlException”类型的异常,但未在用户代码中处理 信息:“char”附近的语法不正确。 我已经看过代码好几次了,但仍然找不到问题的根本原因 代码如下: public static void CreateGuitarBrandsDatabase(string brand) { Sql

我的目标是为用户将添加到网站上的新品牌创建一个新的
数据库。我已经创建了一个代码来执行这样的任务,但它给了我这个
异常

System.Data.dll中发生“System.Data.SqlClient.SqlException”类型的异常,但未在用户代码中处理 信息:“char”附近的语法不正确。

我已经看过代码好几次了,但仍然找不到问题的根本原因

代码如下:

public static void CreateGuitarBrandsDatabase(string brand)
{
    SqlConnection createBrandData = new SqlConnection(@"Data Source=Y560\SQLEXPRESS;Initial Catalog=GuitarItemsDB;Integrated Security=True");
    createBrandData.Open();
    SqlCommand cmdBrandData = new SqlCommand("CREATE TABLE guitarItem" + brand + "(id int,type char(50),model char(50),price float,image1 char(255),image2 char(255),description text,neck type char(100),body char(100), fretboard char(100),fret char(50),bridge char(100),neck pickup char(100),bridge pickup char(100),hardware_color char(50));", createBrandData);
    cmdBrandData.ExecuteNonQuery();//The exception seems to be pointing right here
    createBrandData.Close();
}

您在定义列名时遇到问题。以下列名似乎有问题,每个列名之间用 空间:

您的完整查询应该是:

SqlCommand cmdBrandData = new SqlCommand("CREATE TABLE guitarItem" + brand + "(id int,type char(50),model char(50),price float,image1 char(255),image2 char(255),description text,
neck_type char(100),body char(100), fretboard char(100),fret char(50),bridge char(100),neck_pickup char(100),
bridge_pickup char(100),hardware_color char(50));", createBrandData);
如果希望列名中的单词之间有空格,则应将它们括在方括号([])中:


您在定义列名时遇到问题。以下列名似乎有问题,每个列名之间用 空间:

您的完整查询应该是:

SqlCommand cmdBrandData = new SqlCommand("CREATE TABLE guitarItem" + brand + "(id int,type char(50),model char(50),price float,image1 char(255),image2 char(255),description text,
neck_type char(100),body char(100), fretboard char(100),fret char(50),bridge char(100),neck_pickup char(100),
bridge_pickup char(100),hardware_color char(50));", createBrandData);
如果希望列名中的单词之间有空格,则应将它们括在方括号([])中:


除非名称周围有方括号,例如
“[bridge Picking]char(100)”
如果品牌由用户提供(听起来像是这样),否则不能在列的名称上使用空格。此代码易受SQL注入攻击。@dman2306-哦,糟了!谢谢你提供的信息。在这种情况下,你不能参数化查询,但是你可以确保(在服务器端)品牌只包含字母(可能还有数字)。或者使用不同的配置,其中“brand”是一个“guitarItem”表中的常规列。如果brand是用户提供的(听起来像是用户提供的),则不能在列的名称上使用空格,除非在名称周围使用方括号,如
“[bridge Pick]char(100)”
这段代码容易受到SQL注入攻击。@dman2306-哦,废话!谢谢你提供的信息。在这种情况下,你不能参数化查询,但是你可以确保(在服务器端)品牌只包含字母(可能还有数字)。或者使用不同的配置,其中“brand”是一个“guitarItem”表中的常规列。在数据库世界中工作时,请注意这些空格!!在数据库世界中工作时,请注意这些空间!!
SqlCommand cmdBrandData = new SqlCommand("CREATE TABLE guitarItem" + brand + "(id int,type char(50),model char(50),price float,image1 char(255),image2 char(255),description text,
[neck type] char(100),body char(100), fretboard char(100),fret char(50),bridge char(100),[neck pickup] char(100),
[bridge pickup] char(100),hardware_color char(50));", createBrandData);