2012-04-19 2 views
4

Мне нужно отправить команду в базу данных. Я знаю имена и типы данных всех полей в затронутой таблице, и мне нужно сгенерировать команду, используя их. Моя единственная проблема заключается в определении значений столбцов типов данных, которым требуются кавычки в TSQL - например, если поле было строкой Hello World типа varchar, мне нужно было бы ее процитировать, но если бы это было int, 5, я не нужно было бы цитировать его.Определить, какие типы данных SQL требуют значения для цитирования?

Я мог бы использовать что-то вроде следующего кода, но он кажется очень неэффективным. Может ли кто-нибудь указать мне на лучший способ сделать это - возможно, используя встроенный SQL-сервер или функцию C#?

public string QuoteStringIfDatatypeRequires(string columnName) 
{ 
    if (DataTypes[columnName].Contains("date") || DataTypes[columnName].Contains("time") || 
     DataTypes[columnName].Contains("char") || DataTypes[columnName].Contains("text") || 
     DataTypes[columnName].Contains("binary") || DataTypes[columnName].Contains("image")) 
    { 
     return "'" + columnName + "'"; 
    } 

    return columnName; 
} 
+11

Это просто случайная инъекция SQL, которая должна произойти. Вы думали об использовании ** [параметризованных запросов] (http://blogs.msdn.com/b/sqlphp/archive/2008/09/30/how-and-why-to-use-parameterized-queries.aspx) ** вместо? –

+0

Что представляет 'columnName'? Значение, которое вы хотите вставить в свои таблицы или имя столбца? На самом деле я не понимаю, что вы пытаетесь сделать. – Steve

+0

Я просмотрел параметризованные запросы, и это сработает. Я не знаком с C#, поэтому я действительно не знал, о чем просил. Я приму этот ответ, когда закончится таймер. –

ответ

5

Вы можете процитировать все, и оно будет преобразовано в соответствующий тип данных по самой базе данных.

Но это будет неверно. Вместо этого вы должны использовать параметризованные запросы и отправить значение как:

command.Parameters.AddWithValue("@name", value); 

или

command.Parameters.Add("@name", type, size).Value = value; 

MSDN См.