using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;
using System.Data.SqlClient;
using System.Data;namespace 项目1
{
    class SqlHelper
    {
        private static string connStr = ConfigurationManager.ConnectionStrings["dbconnStr"].ConnectionString;
        public static int ExecuteNonQuery(string sql,params SqlParameter[] parameters)
        {
            using (SqlConnection conn = new SqlConnection(connStr))
            {
                conn.Open();
                using (SqlCommand cmd = conn.CreateCommand())
                {
                    cmd.CommandText = sql;
                   
                    cmd.Parameters.AddRange(parameters);
                    return cmd.ExecuteNonQuery();
                }
            }
        }        public static object ExecuteScalar(string sql, params SqlParameter[] parameters)
        {
            using (SqlConnection conn = new SqlConnection(connStr))
            {
                conn.Open();
                using (SqlCommand cmd = conn.CreateCommand())
                {
                    cmd.CommandText = sql;
                    cmd.Parameters.AddRange(parameters);
                    return cmd.ExecuteScalar();
                }
            }
        }        //只用来执行查询结果比较少的sql
        public static DataTable ExecuteDataTable(string sql, params SqlParameter[] parameters)
        {
            using (SqlConnection conn = new SqlConnection(connStr))
            {
              
                    conn.Open();
              
                
                using (SqlCommand cmd = conn.CreateCommand())
                {                    cmd.CommandText = sql;
                    cmd.Parameters.AddRange(parameters);                    SqlDataAdapter adapter = new SqlDataAdapter(cmd);
                    DataSet dataset = new DataSet();
                    adapter.Fill(dataset);
                    return dataset.Tables[0];
                } 
            }
        }
    }
}其中使用了配置文件存放访问数据库地址,这个是存放连接过程的类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using System.Data;
using System.Data.SqlClient;namespace 项目1
{
    /// <summary>
    /// loginWindow.xaml 的交互逻辑
    /// </summary>
    public partial class loginWindow : Window
    {
        public loginWindow()
        {
            InitializeComponent();
        }        private void button1_Click(object sender, RoutedEventArgs e)
        {
            DataTable table = SqlHelper.ExecuteDataTable("select * from loginTable where UserName=@UserName",new SqlParameter("@UserName",txtbUserName.Text));
           //编程的时候要对“不可能发生的情况”做处理
            if (table.Rows.Count<=0)
            {
                MessageBox.Show("用户不存在!");
                return;
            }
            //防御性编程:Assert:断言
            if (table.Rows.Count > 1) 
            {
                throw new Exception("用户名重复");
            }
            DataRow row=table.Rows[0];
            string dbPassword=(string)row["PassWord"];
            if (dbPassword != pwdUserPass.Password)
            {
                MessageBox.Show("密码错误");            }
            else 
            {
                MessageBox.Show("登录成功!");
            }        }
    }
}这个是登录界面的代码
这个是错误的截图。谢谢帮助 感激不尽~2~

解决方案 »

  1.   

    这样的写法,不要加 conn.Open();
    去掉这行。另外你判断用户名密码是否正确 不要使用 ExecuteDataTable
    使用ExecuteScalar方法就可以了
    select * from loginTable where UserName=@UserName and PassWord=@PassWord
    如果返回值大于0就是登录成功
      

  2.   

    ConfigurationManager.ConnectionStrings["dbconnStr"].ConnectionString;
    换成 System.Configuration.ConfigurationManager.ConnectionStrings["str"].ToString();
      

  3.   

    给你个封装好的数据库访问类,自己研究一下using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Data.SqlClient;
    using System.Data;using System.Diagnostics;namespace DataAccess
    {
        /// <summary>
       
        /// </summary>
        class BaseDb
        {
            /// <summary>
            /// 连接字符串
            /// </summary>
            public static string strCon = System.Configuration.ConfigurationManager.ConnectionStrings["NSdpWebConnectionString"].ToString();
            /// <summary>
            /// 查询 -- 执行存储过程返回数据集
            /// </summary>
            /// <param name="storedProcName">存储过程名</param>
            /// <param name="parameters">存储过程参数</param>
            /// <param name="tableName">DataSet结果中的表名</param>
            /// <returns>DataSet</returns>
            public static DataSet RunProcedureForQuery(string storedProcName, IDataParameter[] parameters)
            {
                using (SqlConnection connection = new SqlConnection(strCon))
                {
                    DataSet dataSet = new DataSet();
                    try
                    {
                        connection.Open();
                        SqlDataAdapter sqlDA = new SqlDataAdapter();
                        sqlDA.SelectCommand = BuildQueryCommand(connection, storedProcName, parameters);
                        sqlDA.Fill(dataSet);
                        connection.Close();
                        return dataSet;
                    }   
                    catch(Exception ex)
                    {
                        //返回为空时代表数据库访问出现异常,界面调用方根据返回信息给用友户好提示。
                        Debug.Print(ex.ToString());
                        return null;
                    }
                }
            }        public static DataSet RunSQLForQuery(string sql)
            {
                using (SqlConnection connection = new SqlConnection(strCon))
                {
                    DataSet dataSet = new DataSet();
                    try
                    {
                        connection.Open();
                        SqlDataAdapter sqlDA = new SqlDataAdapter();
                        sqlDA.SelectCommand = new SqlCommand(sql, connection);
                        sqlDA.Fill(dataSet);
                        connection.Close();
                        return dataSet;
                    }
                    catch (Exception ex)
                    {
                        //返回为空时代表数据库访问出现异常,界面调用方根据返回信息给用户友好提示。
                        Debug.Print(ex.ToString());
                        return null;
                    }
                }
            }        //只需要进行操作不需要返回
            public static void RunSQLForNoQuery(string sql)
            {
                using (SqlConnection connection = new SqlConnection(strCon))
                {
                    try
                    {
                        connection.Open();
                        SqlCommand sc = new SqlCommand(sql,connection);
                        sc.ExecuteNonQuery();
                        connection.Close();
                    }
                    catch (Exception ex)
                    {
                        //返回为空时代表数据库访问出现异常,界面调用方根据返回信息给用户友好提示。
                        Debug.Print(ex.ToString());
                    }
                }
            }        /// <summary>
            /// 更新--执行存储过程,返回影响的行数        
            /// </summary>
            /// <param name="storedProcName">存储过程名</param>
            /// <param name="parameters">存储过程参数</param>
            /// <returns></returns>
            public static int RunProcedureForUpdate(string storedProcName, IDataParameter[] parameters)
            {
                using (SqlConnection connection = new SqlConnection(strCon))
                {
                    int rowsAffected = 0;
                    try
                    {
                        connection.Open();
                        SqlCommand command = BuildQueryCommand(connection, storedProcName, parameters);
                        rowsAffected = command.ExecuteNonQuery();
                    }
                    catch (Exception ex)
                    {
                        Debug.Print(ex.ToString());
                    }
                    return rowsAffected;
                }
            }        /// <summary>
            /// 构建 SqlCommand 对象(用来返回一个结果集,而不是一个整数值)
            /// </summary>
            /// <param name="connection">数据库连接</param>
            /// <param name="storedProcName">存储过程名</param>
            /// <param name="parameters">存储过程参数</param>
            /// <returns>SqlCommand</returns>
            private static SqlCommand BuildQueryCommand(SqlConnection connection, string storedProcName, IDataParameter[] parameters)
            {
                SqlCommand command = new SqlCommand(storedProcName, connection);
                command.CommandType = CommandType.StoredProcedure;
                if (parameters != null)
                {
                    foreach (SqlParameter parameter in parameters)
                    {
                        command.Parameters.Add(parameter);
                    }
                }
                return command;
            }        internal DataSet UserLogin(string strManagerName, string strManagerPWD)
            {
                throw new NotImplementedException();
            }
        }
    }
      

  4.   

    每个方法是不是少一句cmd.Connection=conn;
      

  5.   

    你获取一下 配置文件返回的信息 
    即 private static string connStr ..... 返回的信息 是否正确