使用C#将值存储在Access中的“是/否”字段中

时间:2015-01-27 19:50:47

标签: c# sql ms-access

我有一个带有Yes / No字段的Access数据库。如何更新“是/否”字段值?

我试过

string sQuery = @"UPDATE ch1 set ch1 = " + true ;

但它在“true”上给了我以下错误:

Syntax error in query expression ''True';'.

请告诉我正确的C#语法。

4 个答案:

答案 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