【发布时间】:2022-01-30 00:20:18
【问题描述】:
我想从我的数据库中检索各种信息。但是在测试我的代码时,我得到了消息:
数据为空。不能对空值调用此方法或属性
我的 dB 中有可以为空的列,我认为这些列导致了问题。请有人帮我解决这个问题。这是我的代码:
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Text;
using WpfDropDownNavigate.Models;
namespace WpfDropDownNavigate.Business
{
public class MusteriBusiness
{
public static List<Musteriler> MusterileriGetir()
{
string sqltrtr = "select * from Customers";
SqlDataReader reader = Helper.ExecuteReader(sqltrtr, CommandType.Text);
List<Musteriler> musteriler = new List<Musteriler>();
while (reader.Read())
{
musteriler.Add(new Musteriler
{
MusteriID =reader.GetString(0),
FirmaAdi = reader.GetString(1),
SorumluKisi = reader.GetString(2),
Yetkisi = reader.GetString(3),
Adres = reader.GetString(4),
Sehir = reader.GetString(5),
Ulke = reader.GetString(6),
TelefonNo = reader.GetString(7),
}) ;
}
reader.Close();
return musteriler;
}
public static int MusteriGuncelle(string firmaAdi, string sorumluKisi, string yetkisi, string adres, string sehir, string ulke, string telefonNo,string musteriId)
{
string sqltrt = string.Format("update Customers set CompanyName='{0}',ContactName='{1}',ContactTitle='{2}',Address='{3}',City='{4}',Country='{5}',Phone='{6}' where CustomerID='{7}'", firmaAdi, sorumluKisi, yetkisi, adres, sehir, ulke, telefonNo, musteriId);
return Helper.ExecuteNonQuery(sqltrt, CommandType.Text);
}
}
}
using System;
using System.Collections.Generic;
using System.Text;
namespace WpfDropDownNavigate.Models
{
public class Musteriler
{
public string FirmaAdi { get; set; }
public string SorumluKisi { get; set; }
public string Yetkisi { get; set; }
public string Adres { get; set; }
public string Sehir { get; set; }
//public string Bolge { get; set; }
//public string PostaKodu { get; set; }
public string Ulke { get; set; }
public string TelefonNo { get; set; }
//public string FaxNo { get; set; }
public string MusteriID { get; set; }
}
}
【问题讨论】:
-
UPDATE方法中的UPDATE语句容易受到 SQL 注入 (SQLi) 的攻击,这是一个安全漏洞,您应该避免使用参数化查询。查看此网站以获取解释和编码指南,包括 c# Bobby tables -
SELECT *是您可能想要避免的,因为如果稍后您向表中添加/删除列,您的reader.GetString(x)可能无法按预期工作。如果可能的话,我会建议做SELECT column1, column2, etc FROM tableName -
我敢打赌,错误消息带有行号(如果您没有看到,请双击错误消息,编辑器将跳转到有问题的行)。当您报告问题时,请包含该信息(不是行号,请附上注释)。请不要让我们猜测
标签: c#