.net 如何编辑';位';数据类型?

.net 如何编辑';位';数据类型?,.net,asp.net,database,vb.net,.net,Asp.net,Database,Vb.net,我正在用Visual Basic编写代码。我正在使用复选框控件。现在,根据它的checked属性,我需要在SQLServer数据库中设置/取消设置一个bit列。代码如下: 试试看 conSQL.Open() Dim cmd作为新的SqlCommand(“更新学生集发送邮件=“+_ sendemailCheckBox.Checked.ToString+“其中学生id=”_ +sidnolabel.Text+“'”,conSQL) cmd.ExecuteNonQuery() 最后 conSQL.Cl

我正在用Visual Basic编写代码。我正在使用复选框控件。现在,根据它的checked属性,我需要在SQLServer数据库中设置/取消设置一个bit列。代码如下:

试试看
conSQL.Open()
Dim cmd作为新的SqlCommand(“更新学生集发送邮件=“+_
sendemailCheckBox.Checked.ToString+“其中学生id=”_
+sidnolabel.Text+“'”,conSQL)
cmd.ExecuteNonQuery()
最后
conSQL.Close()
结束尝试
send\u mail
属性是位数据类型。此代码不起作用。 我该怎么做呢?

试试:

Convert.ToInt16(sendemailCheckBox.Checked)
一般来说,我使用
SqlParameters
进行此操作,您可以指定
SqlDbType.TinyInt

是使用sqlparameter的一个例子,它更好,因为它避免了SQL注入

编辑:我刚刚注意到您使用的是
bit
,而不是
tinyint
。不确定这是否有效。

试试:

Convert.ToInt16(sendemailCheckBox.Checked)
一般来说,我使用
SqlParameters
进行此操作,您可以指定
SqlDbType.TinyInt

是使用sqlparameter的一个例子,它更好,因为它避免了SQL注入


编辑:我刚刚注意到您使用的是
bit
,而不是
tinyint
。不确定这是否可行。

井位数据类型相当于C#或Visual Basic中的布尔值,因此您可以简单地为这些类型指定真值或假值,然后更新数据库中的记录

井位数据类型相当于C#或Visual Basic中的布尔值,因此您可以简单地为这些类型指定真值或假值,然后更新数据库中的记录

我儿子被你们学校录取了。他的名字是:

罗伯特';落桌学生--

我们叫他小鲍比·泰尔斯


好吧,有人告诉我,这将被删除,因为我需要倒在剑上或清理我自己的烂摊子。虽然我会保持
如果我的代表被删除了,我认为指出OP代码中的漏洞是很重要的(希望他的帐户能安然无恙)。让我详细说明一下

让我们实际将上述XKCD漫画中的名称改为实际可用于连接查询的名称(假设OP的布尔问题已得到解决):

123;落桌学生--

如果我们将其添加到
sidnolabel
文本框中(或者不管它是什么;如果它在viewstate中,您可以使用简单的工具更改它),则生成的串联查询是

更新学生
设置send_mail=1
其中,学生id=123;放下桌子,学生;——”
它将运行一个伪查询,然后删除学生表

这就是“不好”的定义

OP应该做的是使用参数化查询。这可以防止像这样的注入攻击。正在更新OP的代码

试试看
conSQL.Open()
Dim cmd作为新的SqlCommand(
“更新学生”+\u
“设置发送邮件=@sendMail”+_
“where student_id=@studentId”,conSQL)
cmd.Parameters.Add(_
“@sendMail”,SqlDbType.Bit)。值=_
sendemailCheckBox。选中
cmd.Parameters.Add(_
“@studentId”,SqlDbType.NChar,25)。值=_
文本“最好在会话中跟踪此信息!”!
cmd.ExecuteNonQuery()
最后
conSQL.Close()
结束尝试
这将解决OP的问题并防止sql注入攻击。这不是很重要吗


*请注意,我没有VB,这是没有测试。任何希望编辑和修复错误的VB.NET开发人员,我都乐意接受您的帮助。

我的儿子在贵校注册。他的名字是:

罗伯特';落桌学生--

我们叫他小鲍比·泰尔斯


好吧,有人告诉我,这将被删除,因为我需要倒在剑上或清理我自己的烂摊子。虽然我会保持
如果我的代表被删除了,我认为指出OP代码中的漏洞是很重要的(希望他的帐户能安然无恙)。让我详细说明一下

让我们实际将上述XKCD漫画中的名称改为实际可用于连接查询的名称(假设OP的布尔问题已得到解决):

123;落桌学生--

如果我们将其添加到
sidnolabel
文本框中(或者不管它是什么;如果它在viewstate中,您可以使用简单的工具更改它),则生成的串联查询是

更新学生
设置send_mail=1
其中,学生id=123;放下桌子,学生;——”
它将运行一个伪查询,然后删除学生表

这就是“不好”的定义

OP应该做的是使用参数化查询。这可以防止像这样的注入攻击。正在更新OP的代码

试试看
conSQL.Open()
Dim cmd作为新的SqlCommand(
“更新学生”+\u
“设置发送邮件=@sendMail”+_
“where student_id=@studentId”,conSQL)
cmd.Parameters.Add(_
“@sendMail”,SqlDbType.Bit)。值=_
sendemailCheckBox。选中
cmd.Parameters.Add(_
“@studentId”,SqlDbType.NChar,25)。值=_
文本“最好在会话中跟踪此信息!”!
cmd.ExecuteNonQuery()
最后
conSQL.Close()
结束尝试
这将解决OP的问题并防止sql注入攻击。这不是很重要吗


*请注意,我没有VB,这是没有测试。任何希望编辑和修复错误的VB.NET开发人员,我都乐意接受您的帮助。

首先,以神圣的名义,至少要参数化您的SQL代码。否则,您将请求SQL注入攻击


其次,“bit”数据类型使用1表示真,0表示假。这就是SQL在赋值时希望看到的情况。

首先,以神圣的名义,至少要参数化SQL代码。否则,您将请求SQL注入攻击

其次,“bit”数据类型使用1