确定哪些SQL数据类型需要引用值?

Joh*_*0te 5 .net c# t-sql ado.net sql-server-2008-r2

我需要向数据库发送命令.我知道受影响的表中所有字段的名称和数据类型,我需要使用它们生成命令.我唯一的问题是确定哪些列值是TSQL中需要引号的数据类型 - 例如,如果字段是一个Hello World类型的字符串varchar,我需要引用它,但如果它是一个int,5,我不会需要引用它.

我可以使用类似下面的代码,但它似乎非常低效.有人能指出我这样做的更好方法 - 可能使用内置的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;
}
Run Code Online (Sandbox Code Playgroud)

aba*_*hev 6

您可以引用所有内容,并将由数据库本身转换为适当的数据类型.

但那是不正确的.相反,您需要使用参数化查询并按原样发送值:

command.Parameters.AddWithValue("@name", value);
Run Code Online (Sandbox Code Playgroud)

要么

command.Parameters.Add("@name", type, size).Value = value;
Run Code Online (Sandbox Code Playgroud)

请参阅MSDN.