c# - ASP.Net\C# SQL 参数 DBNull
问题描述
我正在努力为 C# \ ASP.Net 使用 SQL 参数,而不是在 ASP.Net 中使用 C#,对它来说太新了,我有一个带有下拉框 (drpdSerType) 和一个文本框 (txtRNumSer) 和一个按钮的网页,按钮代码如下...
如果我不使用注释代码中看到的参数,那么它可以正常工作......
try
{
SqlConnection con = new SqlConnection();
SqlDataAdapter sda = new SqlDataAdapter();
DataTable dt = new DataTable();
con.ConnectionString = "Server=server1;Database=db1;Integrated Security=True";
sda.SelectCommand.Parameters.AddWithValue("@I", drpdSerType.SelectedValue.ToString());
sda.SelectCommand.Parameters.AddWithValue("@S", txtRNumSer.Text);
sda = new SqlDataAdapter("SELECT Number, Type, Qty, Date, num, ReceiptID FROM IssuedRN WHERE @I = @S", con);
//This line works but no secure
//sda = new SqlDataAdapter("SELECT Number, Type, Qty, Date, num, ReceiptID FROM IssuedRN WHERE " + drpdSerType.SelectedValue.ToString() + " = '" + txtRNumSer.Text + "'", con);
sda.Fill(dt);
GridView1.DataSource = dt;
GridView1.DataBind();
我收到以下错误;System.NullReferenceException:“对象引用未设置为对象的实例。” 与线路有关
sda.SelectCommand.Parameters.AddWithValue("@I", drpdSerType.SelectedValue.ToString());
我也遵循了这里的指导; https://csharp-station.com/Tutorial/AdoDotNet/Lesson06
感谢您对此的任何帮助,我尝试了许多不同的方法来使用参数,但似乎都这样做或给出了上述错误。
谢谢卡尔
更新:
我已经添加了一个由下拉列表驱动的 switch 语句,所以参数 @I 现在是硬编码的......
string qryselect = drpdSerType.SelectedValue.ToString();
string cmd = "";
switch (qryselect)
{
case "Number":
cmd = "SELECT Number, Type, Qty, Date, RNum, ReceiptID FROM IssuedRN WHERE Number = @S";
break;
case "RNum":
cmd = "SELECT Number, Type, Qty, Date, RNum, ReceiptID FROM IssuedRN WHERE RNum = @S";
break;
case "ReceiptID":
cmd = "SELECT Number, Type, Qty, Date, RNum, ReceiptID FROM IssuedRN WHERE ReceiptID = @S";
break;
}
我猜我在将下拉列表中的值传递给 SQL 参数时遗漏了一些东西,因为这些值是预先填充的并且匹配列和查询,它们永远不会为空。
解决方案
你有一个错误
"SELECT Number, Type, Qty, Date, num, ReceiptID FROM IssuedRN WHERE @I = @S"
WHERE @I = @S" 这是什么?
并修复其余部分
con.ConnectionString = "Server=server1;Database=db1;Integrated Security=True";
var sqlString="....fixed sql";
var cmd = new SqlCommand(sqlSting, con);
var value= drpdSerType.SelectedValue;
if(value == null)
cmd.Parameters.AddWithValue("@I", DBNull.Value);
else
cmd.Parameters.AddWithValue("@I", value.ToString());
cmd.Parameters.AddWithValue("@S", txtRNumSer.Text);
sda = new SqlDataAdapter();
sda.SelectCommand=cmd;
sda.Fill(dt);
.....
推荐阅读
- python - 带有 MobiletNetV2 的 cifar100
- javascript - 即使从 ajax 验证返回 true,onsubmit 也没有提交表单
- java - 我正在尝试导航优化路线,但在 Logcat 中出现错误
- apache - 如何使用 htaccess 从 URL 中删除子文件夹
- java - 如何使用 Moshi 模型对象构建 GraphQL 请求
- regex - 网站路径导致使用网站名称出现问题
- php - 在 Laravel 中将类名传递给视图的常见做法
- dart - 在 Dart 的 await-for 循环中如何(并且应该?)取消一个流?
- android - Android Studio 未显示构建变体
- java - Firebase:我使用的结构是否正确?