Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 适用于多个数据类型的通用SQL UPDATE子句_C#_Sql_Ms Access - Fatal编程技术网

C# 适用于多个数据类型的通用SQL UPDATE子句

C# 适用于多个数据类型的通用SQL UPDATE子句,c#,sql,ms-access,C#,Sql,Ms Access,对SQL来说相当陌生。假设我有一个表,其中field1的类型为string(VARCHAR),field2的类型为integer(integer)。据我所知,字符串字段应该使用='newValue',整数字段应该使用=newValue(日期字段应该使用=\newValue) 是否有一种技巧可以让SET子句的泛型构造不需要事先知道要更新的字段的类型 void UpdateDatabase(string field, string oldValue, string newValue) { /

对SQL来说相当陌生。假设我有一个表,其中field1的类型为string(VARCHAR),field2的类型为integer(integer)。据我所知,字符串字段应该使用
='newValue'
,整数字段应该使用
=newValue
(日期字段应该使用
=\newValue

是否有一种技巧可以让SET子句的泛型构造不需要事先知道要更新的字段的类型

void UpdateDatabase(string field, string oldValue, string newValue)
{
    // Construct without needing work out whether '', ## or (nothing) is required?
    string sqlUpdate = (
        "UPDATE MyTable" +
        " SET " + field + " = " + newValue +
        " WHERE " + field + " = " + oldValue);
    // Execute the statement on the database
}
这可以按如下方式使用:

UpdateDatabase("field1", "Danger Mouse!", "Mickey Mouse");
UpdateDatabase("field2", "15", "7");

如果要预先确定要插入的字段的数据类型,则代码需要复杂得多

大多数SQL风格都有某种目录,因此,例如,在MS SQL Server上,您需要执行以下操作:

SELECT DATA_TYPE FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'MyTable' AND COLUMN_NAME = 'field'
对于要写入的每一列,根据数据类型应用单引号或非单引号。 有很多方法和途径可以做到这一点,这取决于您希望同时写入多少不同的字段,这取决于获取列数据类型的逻辑必须有多复杂。 对于大量的列,理想情况下,您应该首先将要写入的所有列名收集到一个表中,然后使用该表查询数据类型

然而,在SQLServer中,您通常可以在所有内容(甚至整数和浮点)周围加上单引号。SQL Server将根据需要智能地删除单引号


看起来您使用的是MySQL,因为您需要在日期周围添加哈希,在这种情况下,我为您的丢失感到抱歉。

不是真的,但您应该使用SQL参数,而不是将值连接到查询字符串中。标记您正在使用的数据库。您打算做的事情有点可疑,但最终会更好地由sql存储过程来处理,该过程可以访问模式表的信息,而不是客户机代码。我强烈建议为每个表单独编码,或者使用ORM,如Dapper或Entity Framework。无论您做什么,都要使用参数实际上,我继承了一个仍然使用DAO和MicrosoftAccess97的旧项目。我正在更新到ODBC、OleDB或SQL Server。请正确使用参数,特别是如果您已经查询了数据类型。ODBC和OleDB是连接样式,而不是数据库。Access 97是迄今为止设计的最差的数据库引擎之一,我会尽快切换到SQL Server,然后这个数据类型问题就会消失,因为您可以对插入的所有内容进行单引号引用。