将字符数组与数据库记录进行比较并读取记录

本文关键字:记录 比较 读取 数组 数据库 字符 | 更新日期: 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;

因此,当您要关闭它时,您当然会收到错误。

不能关闭根本不创建的对象。

【我想关上城堡的门,但不幸的是,这座城堡只存在于我的梦中......