我有一个带有Yes / No字段的Access数据库。如何更新“是/否”字段值?
我试过
string sQuery = @"UPDATE ch1 set ch1 = " + true ;
但它在“true”上给了我以下错误:
Syntax error in query expression ''True';'.
请告诉我正确的C#语法。
答案 0 :(得分:2)
我可以看到你的陈述有很多问题。
string sQuery = @"UPDATE ch1 set ch1 = " + true ;
我没有MS-Access方便,但它似乎使用-1表示“是”。所以你可以试试:
string sQuery = @"UPDATE ch1 set ch1 = -1" ;
或者如果布尔值在变量中,比如foo
:
string sQuery = @"UPDATE ch1 set ch1 = " + (foo ? -1 : 0) ;
然而,正如评论者@Gord Thompson指出的那样,不建议这样做。文字
string sQuery = @"UPDATE ch1 set ch1 = True" ;
或
string sQuery = @"UPDATE ch1 set ch1 = " + foo;
应该有效。
我注意到您的错误消息为
查询表达式中的语法错误''True';'。
引号之间带True
,但也有分号。导致错误的行可能与您提供给我们的行不同,也许是
string sQuery = @"UPDATE ch1 set ch1 = " + true + ";";
或类似的东西?使用分号,SQL不期待一个分号?
还有一些问题。我注意到表名和列名都是ch1
。虽然允许表和列具有相同的名称,但它不会经常发生。这些真的是正确的名字吗?
此外,这里没有WHERE子句。在它的当前形式中,此语句将使用相同的值填充表的整个列,这可能不是您想要的。
最后,格式
string sQuery = @"UPDATE ch1 set ch1 = " + something ;
对称为SQL注入的众所周知的攻击持开放态度。你应该阅读所谓的“准备好的陈述”并使用它们。作为附带好处,这还可以防止SQL语句中出现一些语法错误。
答案 1 :(得分:1)
您的问题并不清楚,但我相信您搜索的字段是bit
字段。该字段将存储 One 或 Zero 。这将代表一个布尔值:
例如,希望这能为您澄清一种方法。
答案 2 :(得分:1)
使用Access SQL进行更新时,将YesNo字段视为数字字段。
而不是
string sQuery = @"UPDATE ch1 set ch1 = " + true ;
写
string sQuery = @"UPDATE ch1 set ch1 = true " ;
或
string myBoolStr = "TRUE"
string sQuery = @"UPDATE ch1 set ch1 = " + myBoolStr ;
换句话说,Access SQL需要一个数字和布尔字符串。 作为字符串,它们会在双引号内。 但是,数字和布尔值不是双引号内的单引号。
如果chi是一个字符串字段,那么您的查询将是
string sQuery = @"UPDATE ch1 set ch1 = 'True'" ;
答案 3 :(得分:0)
我正在使用C#中的Visual Studio 2012创建一个程序,我连接到MS-Access 2010数据库,该数据库有一个名为EnabledDisabled的字段的表。这个字段是是/否数据类型(换句话说,你会看到它的格式是真/假。这种类型的字段看起来像一个复选框。无论如何,从C#这是我做的,并将字段设置为已选中= True =是它必须以-1作为整数传递,并将其设置为unchecked = False =否它必须作为整数传递给0。
string myConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Environment.CurrentDirectory + "\\MYDATABASE.accdb;Persist Security Info=False";
OleDbConnection myDBConnection = null;
int myEnabled = 0;
if (checkBox1.Checked == true)
{
myEnabled = -1; // Set as checked or Yes in MS-Access on a Yes/No Data Type Field
myComment+= ", Account=Enabled";
}
else
{
myEnabled = 0; // Set as unchecked or No in MS-Access on a Yes/No Data Type Field
myComment += ", Account=Disabled";
}
myDBConnection = new OleDbConnection(myConnectionString);
myDBConnection.Open();
string myDateTimeStamp = DateTime.Now.ToString();
myDBCommand = new OleDbCommand("insert into tblAuthorizedUsers (USERID, Fullname, AuthorizationLevel, EnabledDisabled, USERIDMaker, DateTimeStamp) values('" + textBox1.Text.Trim().ToUpper() + "','" + textBox2.Text.Trim() + "','" + myAuthorizationLevel + "','" + myEnabled + "','" + Environment.UserName.Trim().ToUpper() + "','" + myDateTimeStamp + "')", myDBConnection);
myDBCommand.ExecuteNonQuery(); // With this you can handles multiple inserts to a MSAccess table even if this line is inside of the loop of multiple records handling