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

我可以使用类似以下代码的内容,但效率似乎很低。有人可以指出我这样做的更好方法-可能使用内置的SQL Server或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;
}

最佳答案

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

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

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

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

参见MSDN

关于c# - 确定哪些SQL数据类型需要用引号引起来?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10235507/

10-12 17:35
查看更多