将字符数组与数据库记录进行比较并读取记录
本文关键字:记录 比较 读取 数组 数据库 字符 | 更新日期: 2023-09-27 17:56:00
我试图将数据库从MySQL更改为SQL server 2008 express,用于此VS2010 C#项目。但是,在我更改连接字符串和查询后,程序会在"cmr.close()"上产生错误"空引用异常未处理"。这是代码和发生错误的位置:
namespace JawiRdrSQL
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
SqlConnection sc = new SqlConnection("Data Source=USER-PC''SQLEXPRESS;Initial Catalog=firstDB;Integrated Security=True");
SqlCommand cmd;
SqlDataReader cmr;
public MainWindow()
{
InitializeComponent();
}
//string sc;
string strValue;
private void button1_Click(object sender, RoutedEventArgs e)
{
strValue = textBox1.Text;
char[] strVal = strValue.ToCharArray();
Array.Reverse(strVal);
foreach(char obj in strVal)
{
try
{
sc.Open();
cmd = new SqlCommand ("select JawiReader (stringR)" + ((char)obj), sc);
cmd.ExecuteNonQuery();
if (cmr.Read())
{
label1.Content += cmr["stringJ"].ToString();
}
else
{
MessageBox.Show("tidak sah");
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
cmr.Close(); // error occurs here
sc.Close();
}
}
我正在尝试生成一个程序,该程序接收到一个字符串,该字符串将被分解为字符,然后与数据库中的值进行比较。之后,程序将从数据库中输出一串值。
既然你把它定义为;
SqlDataReader cmr;
默认情况下,它将null
。这就是为什么当你尝试打电话时你会NullReferenceException
;
cmr.Close();
因为你从不初始化你的读取器。在这种情况下,您无需使用 ExecuteNonQuery
。只需使用ExecuteReader
方法生成cmr
即可;
cmd = new SqlCommand ("select JawiReader (stringR)" + ((char)obj), sc);
cmr = cmd.ExecuteReader();
请使用using
语句来处置您的连接、命令和读取器。
你从不初始化你的SQLDataReader cmr;
因此,当您要关闭它时,您当然会收到错误。
不能关闭根本不创建的对象。
【我想关上城堡的门,但不幸的是,这座城堡只存在于我的梦中......