2017-02-17 2 views
0

Моя цель - создать новый database для новых брендов, которые пользователь добавит на веб-сайт. Я создал код для выполнения такой задачи, но это дает мне этот exception:Как создать новую базу данных в asp.net?

Исключение типа «System.Data.SqlClient.SqlException» произошло в System.Data.dll, но не обрабатывается код пользователя Дополнительная информация : Неверный синтаксис рядом с символом «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(); 
} 
+0

Вы не можете использовать пробелы для имен столбцов, если вы не окружите имя квадратом uare brakets, например '' [bridge pickup] char (100) "' – Gusman

+0

, если бренд предоставляется пользователю (похоже, это так), этот код уязвим для атак SQL-инъекций. – dman2306

+0

@ dman2306 - О, дерьмо! хорошо спасибо за информацию. – BrunoEarth

ответ

3

У вас есть вопрос в определении имени столбца. После названия столбцов, кажется, есть проблема, в которой каждое имя столбца было отделенный пространства:

neck type char(100) --> name_type char(100) 
neck pickup char(100) --> neck_pickup char(100) 
bridge pickup char(100) --> bridge_pickup char(100) 

Ваш полный запрос должен быть:

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); 
+0

Остерегайтесь тех мест, когда вы работаете в мире баз данных! – ryguy72

Смежные вопросы