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

时间:2015-06-14 12:14:16

标签: c# sql-server visual-studio-2010

我尝试将数据库从MySQL更改为SQL Server 2008 Express for 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();
            }
        }

我正在尝试生成一个接收字符串的程序,该字符串将被分解为char,然后与数据库中的值进行比较。之后程序将从数据库中输出一串值。

2 个答案:

答案 0 :(得分:2)

因为你将其定义为;

SqlDataReader cmr;

默认情况下为null。这就是你试图打电话时NullReferenceException的原因;

cmr.Close();

因为您从不初始化您的读者。在这种情况下,您不需要使用ExecuteNonQuery。只需使用cmr方法生成ExecuteReader,如<; p>

cmd = new SqlCommand ("select JawiReader (stringR)" + ((char)obj), sc);
cmr = cmd.ExecuteReader();

请使用using statement处理您的连接,命令和读者。

答案 1 :(得分:0)

您永远不会初始化False

因此,当您想要关闭它时,当然会出现错误。

您无法关闭尚未创建的对象。

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