C#登录代码问题(窗体程序)
想做个winform的登陆程序,要求是需要有get,set方法来传参数,还需要写个方法,需要把连接数据库那部分程序单提出来,以后可能还要做注册,修改等,方便调用,我写的代...
想做个winform的登陆程序,要求是需要有get,set方法来传参数,还需要写个方法,需要把连接数据库那部分程序单提出来,以后可能还要做注册,修改等,方便调用,我写的代码有问题,请大家帮我看看
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;
namespace login3
{
public class User
{
private string _username;
private string _password;
public User()
{
}
public User Login(string UserName, string PassWord)
{
SqlCommand command = new SqlCommand();
command.CommandText = "select count(*) from login where username='"+UserName+"' and password '"+PassWord+"'";
command.CommandType = System.Data.CommandType.Text;
SqlConnection connection = new SqlConnection("server = .;database = stuDB;uid = sa ; pwd = songweixun");
SqlDataReader reader;
command.Connection = connection;
connection.Open();
reader = command.ExecuteReader();
/* if (reader.Read())
{
User userData = new User();
userData.UserName = Convert.ToString(reader["username"]);
userData.PassWord = Convert.ToString(reader["password"]);
reader.Close();
connection.Close();
return userData;
}
reader.Close();
connection.Close();
return null; */
return null;
}
public string UserName
{
get
{
return _username;
}
set
{
_username = value;
}
}
public string PassWord
{
get
{
return _password;
}
set
{
_password = value;
}
}
}
}
下面是winform 里按钮调用类的代码
User userLogin = new User();
string UserName = userLogin.UserName;
string PassWord = userLogin.PassWord;
// SqlConnection connection = new SqlConnection("server = .;database = stuDB;uid = sa ; pwd = songweixun");
connection.Open();
reader = command.ExecuteReader();
if (reader.Read())
{
reader = command.ExecuteReader();
User userData = new User();
userData.UserName = Convert.ToString(reader["username"]);
userData.PassWord = Convert.ToString(reader["password"]);
reader.Close();
connection.Close();
// return true;
}
reader.Close();
connection.Close();
// return false;
改成 select * from 后 报空指针异常错误 展开
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;
namespace login3
{
public class User
{
private string _username;
private string _password;
public User()
{
}
public User Login(string UserName, string PassWord)
{
SqlCommand command = new SqlCommand();
command.CommandText = "select count(*) from login where username='"+UserName+"' and password '"+PassWord+"'";
command.CommandType = System.Data.CommandType.Text;
SqlConnection connection = new SqlConnection("server = .;database = stuDB;uid = sa ; pwd = songweixun");
SqlDataReader reader;
command.Connection = connection;
connection.Open();
reader = command.ExecuteReader();
/* if (reader.Read())
{
User userData = new User();
userData.UserName = Convert.ToString(reader["username"]);
userData.PassWord = Convert.ToString(reader["password"]);
reader.Close();
connection.Close();
return userData;
}
reader.Close();
connection.Close();
return null; */
return null;
}
public string UserName
{
get
{
return _username;
}
set
{
_username = value;
}
}
public string PassWord
{
get
{
return _password;
}
set
{
_password = value;
}
}
}
}
下面是winform 里按钮调用类的代码
User userLogin = new User();
string UserName = userLogin.UserName;
string PassWord = userLogin.PassWord;
// SqlConnection connection = new SqlConnection("server = .;database = stuDB;uid = sa ; pwd = songweixun");
connection.Open();
reader = command.ExecuteReader();
if (reader.Read())
{
reader = command.ExecuteReader();
User userData = new User();
userData.UserName = Convert.ToString(reader["username"]);
userData.PassWord = Convert.ToString(reader["password"]);
reader.Close();
connection.Close();
// return true;
}
reader.Close();
connection.Close();
// return false;
改成 select * from 后 报空指针异常错误 展开
展开全部
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
namespace LoginForm
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void btnOK_Click(object sender, EventArgs e)
{
string strConnection = "";//定义数据连接字符
SqlConnection conn = null;//定义一个属性,类型为SQL连接
strConnection = "Data Source=localhost;User ID=sa;PassWord=123;Initial Catalog=login;";
//Data Source为数据库所在服务器的IP地址;Initial Catalog为要连接的数据库名称。
conn = new SqlConnection(strConnection);
try
{
if (conn.State == ConnectionState.Closed)
{
conn.Open();//打开数据库
}
}
catch
{
MessageBox.Show("数据库连接失败");
}
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;//指示命令发个哪个数据库
cmd.CommandType = CommandType.Text;//指示是什么类型的命令
string sql2 = "select UserName from zhuce where UserName='" + txtUserName.Text + "'";
cmd.CommandText = sql2;
if (conn.State == ConnectionState.Closed)
{
conn.Open();//打开数据库
}
if (cmd.ExecuteScalar() != null)
{
MessageBox.Show("该用户已存在");
this.txtUserName.Text = "";
this.txtPsw.Text = "";
this.txtPsw2.Text = "";
}
else
{
string sql1 = "insert into zhuce(UserName,Password1,Password2) values('" + txtUserName.Text + "','" + txtPsw.Text + "','" + txtPsw2.Text + "')";
cmd.CommandText = sql1;
//conn.Open();//打开连接,准备接受命令
////执行命令,并返回对执行结果进行读取的阅读器(SqlDataReader)对象(reader)
//SqlDataReader reader = cmd.ExecuteReader();
////Read方法开始读取数据,读到记录,则返回true,并指向下一条记录,否则返回false
if (this.txtUserName.Text.Trim() == null || this.txtPsw.Text.Trim() == null)
{
conn.Close();
MessageBox.Show("用户名或密码不能为空");
}
else if (this.txtPsw.Text.Trim() != this.txtPsw2.Text.Trim())
{
conn.Close();
MessageBox.Show("两次密码不一致,请重新输入");
}
else if (cmd.ExecuteNonQuery() != -1)
{
MessageBox.Show("注册成功");
this.Hide();
Form2 form2 = new Form2();
form2.Show();
}
else
{
MessageBox.Show("注册失败");
this.txtPsw.Text = "";
this.txtPsw2.Text = "";
}
}
}
private void btnExit_Click(object sender, EventArgs e)
{
this.Close();
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
Application.Exit();
}
}
}
试试这个,注意数据库连接啊
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.SqlClient;
namespace SQL_Manager //注意使用时修改命名空间为本工程的命名空间
{
class SQL_DBManager
{
string connString = ""; //定义数据库连接字符串
SqlConnection conn = null; //定义一个类属性,类型为SQL连接
SqlCommand cmd = new SqlCommand(); //针对数据库操作的命令对象
public SQL_DBManager() //利用构造函数初始化SQL Server连接
{
connString = "Data Source=localhost;User ID=sa;Password=513327;Initial Catalog=TelecomBusinessData;";
//Data Source为数据库所在服务器的IP地址;Initial Catalog为要连接的数据库名称。
conn = new SqlConnection(connString);
}
public void openConnection() //数据库连接打开函数
{
if (conn.State == ConnectionState.Closed)
conn.Open(); //打开数据库连接
}
public void closeConnection() //数据库连接关闭函数
{
if (conn.State == ConnectionState.Open)
conn.Close(); //关闭数据库连接
}
public SqlConnection getConn() //获取数据库的连接函数
{
if (conn.State == ConnectionState.Closed)
conn.Open(); //打开数据库连接
return conn;
}
//根据传入的SQL语句执行并返回一个select查询结果数据集(object),例如:dataGridView的数据源绑定等
public DataSet getDataSet(string strSql)
{
SqlDataAdapter sda = new SqlDataAdapter(strSql, getConn());
DataSet ds = new DataSet();
ds.Clear();
sda.Fill(ds);
closeConnection();
return ds;
/**********************************************************************************
调用方法:
DataGridView的数据绑定:
string strSql = "select * from Table_UserType";
SQL_DBManager sql_DBManager = new SQL_DBManager();
dataGridView1.DataSource = sql_DBManager.getDataSet(strSql).Tables[0].DefaultView;
***********************************************************************************
ComboBox的数据绑定:
string strSql = "select * from Table_UserType";
SQL_DBManager sql_DBManager = new SQL_DBManager();
comboBox1.DataSource = sql_DBManager.getDataSet(strSql).Tables[0];
comboBox1.DisplayMember = "UserType";
**********************************************************************************/
}
public DataSet getDataSet(string strSql, string tableName)
{
SqlDataAdapter sda = new SqlDataAdapter(strSql, getConn());
DataSet ds = new DataSet();
sda.Fill(ds,tableName);
closeConnection();
return ds;
/******************************************************************************************************
调用方法:
DataGridView的数据绑定:
string strSql = "select * from Table_UserType";
SQL_DBManager sql_DBManager = new SQL_DBManager();
dataGridView1.DataSource = sql_DBManager.getDataSet(strSql).Tables[Table_UserType].DefaultView;
********************************************************************************************************
ComboBox的数据绑定:
string strSql = "select * from Table_UserType";
SQL_DBManager sql_DBManager = new SQL_DBManager();
comboBox1.DataSource = sql_DBManager.getDataSet(strSql).Tables[Table_UserType];
comboBox1.DisplayMember = "UserType";
*******************************************************************************************************/
}
//根据传入的SQL语句执行并返回一个select查询结果,返回值为NULL或!NULL,用于查询某个值是否存在,例如用来判断用户名和密码的正确性
public object executeGetReturnObject(string strSql) //strSql是传入的SQL命令语句
{
cmd.Connection = getConn(); //命令对象是需要基于一个已经打开了的连接
cmd.CommandText = strSql; //指定数据库命令对象的执行语句
object result = cmd.ExecuteScalar(); //执行命令语句,并将其以字符串的形式返回
closeConnection();
return result;
}
//根据传入的SQL语句执行并返回结果,返回类型为字符串
public string executeGetReturnString(string strSql) //strSql是传入的SQL命令语句
{
cmd.Connection = getConn(); //命令对象是需要基于一个已经打开了的连接
cmd.CommandText = strSql; //指定数据库命令对象的执行语句
string result = cmd.ExecuteScalar().ToString(); //执行命令语句,并将其以字符串的形式返回
closeConnection();
return result;
}
//根据传入的SQL语句执行并返回结果,返回类型为整型
public int executeGetReturnInt(string strSql)//strSql是传入SQL命令语句
{
cmd.Connection = getConn(); //命令对象是需要基于一个已经打开了的连接
cmd.CommandText = strSql; //指定数据库命令对象的执行语句
int resultInt = Convert.ToInt32(cmd.ExecuteScalar());//执行命令语句,并将其以整数的形式返回
closeConnection();
return resultInt;
}
//根据传入的SQL语句,执行ExecuteNonQuery方法,用于UPDATE、INSERT 和 DELETE 语句
//虽然 ExecuteNonQuery 不返回任何行,但映射到参数的任何输出参数或返回值都会用数据进行填充。
//对于 UPDATE、INSERT 和 DELETE 语句,返回值为该命令所影响的行数。对于所有其他类型的语句,返回值为 -1。如果发生回滚,返回值也为 -1。
public int executeNonQuery(string strSql) //strSql是传入的SQL命令语句
{
cmd.Connection = getConn();
cmd.CommandText = strSql;
int i = cmd.ExecuteNonQuery();
closeConnection();
return i;
}
////根据传入的SQL语句执行并返回一个select查询结果,返回一个可查询结果集合,用于分条读取
public SqlDataReader getSqlDataReader(string strSql)
{
cmd.Connection = getConn(); //命令对象是需要基于一个已经打开了的连接
cmd.CommandText = strSql;
SqlDataReader sdr = cmd.ExecuteReader();
return sdr; //注意在此不能关闭数据库连接,否则无法逐条读取数据
/******************************************************************************
调用方法:
string strSql = "select * from Table_UserType";
SQL_DBManager sql_DBManager = new SQL_DBManager();
SqlDataReader sdr=sql_DBManager.getSqlDataReader(strSql);
while(sdr.Read())
{
richTextBox1.Text = sdr["UserType"].ToString();
}
sdr.Close();
sql_DBManager.closeConnection(); //在此必须关闭数据库连接
*******************************************************************************/
}
}
}
这是我总结的一个SQL的调用方法,里面有SQL的各种方法,直接把这个建成一个.CS 文件,把 这个类加进去,这是一个封装的类,加进去可以直接调用
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
namespace LoginForm
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void btnOK_Click(object sender, EventArgs e)
{
string strConnection = "";//定义数据连接字符
SqlConnection conn = null;//定义一个属性,类型为SQL连接
strConnection = "Data Source=localhost;User ID=sa;PassWord=123;Initial Catalog=login;";
//Data Source为数据库所在服务器的IP地址;Initial Catalog为要连接的数据库名称。
conn = new SqlConnection(strConnection);
try
{
if (conn.State == ConnectionState.Closed)
{
conn.Open();//打开数据库
}
}
catch
{
MessageBox.Show("数据库连接失败");
}
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;//指示命令发个哪个数据库
cmd.CommandType = CommandType.Text;//指示是什么类型的命令
string sql2 = "select UserName from zhuce where UserName='" + txtUserName.Text + "'";
cmd.CommandText = sql2;
if (conn.State == ConnectionState.Closed)
{
conn.Open();//打开数据库
}
if (cmd.ExecuteScalar() != null)
{
MessageBox.Show("该用户已存在");
this.txtUserName.Text = "";
this.txtPsw.Text = "";
this.txtPsw2.Text = "";
}
else
{
string sql1 = "insert into zhuce(UserName,Password1,Password2) values('" + txtUserName.Text + "','" + txtPsw.Text + "','" + txtPsw2.Text + "')";
cmd.CommandText = sql1;
//conn.Open();//打开连接,准备接受命令
////执行命令,并返回对执行结果进行读取的阅读器(SqlDataReader)对象(reader)
//SqlDataReader reader = cmd.ExecuteReader();
////Read方法开始读取数据,读到记录,则返回true,并指向下一条记录,否则返回false
if (this.txtUserName.Text.Trim() == null || this.txtPsw.Text.Trim() == null)
{
conn.Close();
MessageBox.Show("用户名或密码不能为空");
}
else if (this.txtPsw.Text.Trim() != this.txtPsw2.Text.Trim())
{
conn.Close();
MessageBox.Show("两次密码不一致,请重新输入");
}
else if (cmd.ExecuteNonQuery() != -1)
{
MessageBox.Show("注册成功");
this.Hide();
Form2 form2 = new Form2();
form2.Show();
}
else
{
MessageBox.Show("注册失败");
this.txtPsw.Text = "";
this.txtPsw2.Text = "";
}
}
}
private void btnExit_Click(object sender, EventArgs e)
{
this.Close();
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
Application.Exit();
}
}
}
试试这个,注意数据库连接啊
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.SqlClient;
namespace SQL_Manager //注意使用时修改命名空间为本工程的命名空间
{
class SQL_DBManager
{
string connString = ""; //定义数据库连接字符串
SqlConnection conn = null; //定义一个类属性,类型为SQL连接
SqlCommand cmd = new SqlCommand(); //针对数据库操作的命令对象
public SQL_DBManager() //利用构造函数初始化SQL Server连接
{
connString = "Data Source=localhost;User ID=sa;Password=513327;Initial Catalog=TelecomBusinessData;";
//Data Source为数据库所在服务器的IP地址;Initial Catalog为要连接的数据库名称。
conn = new SqlConnection(connString);
}
public void openConnection() //数据库连接打开函数
{
if (conn.State == ConnectionState.Closed)
conn.Open(); //打开数据库连接
}
public void closeConnection() //数据库连接关闭函数
{
if (conn.State == ConnectionState.Open)
conn.Close(); //关闭数据库连接
}
public SqlConnection getConn() //获取数据库的连接函数
{
if (conn.State == ConnectionState.Closed)
conn.Open(); //打开数据库连接
return conn;
}
//根据传入的SQL语句执行并返回一个select查询结果数据集(object),例如:dataGridView的数据源绑定等
public DataSet getDataSet(string strSql)
{
SqlDataAdapter sda = new SqlDataAdapter(strSql, getConn());
DataSet ds = new DataSet();
ds.Clear();
sda.Fill(ds);
closeConnection();
return ds;
/**********************************************************************************
调用方法:
DataGridView的数据绑定:
string strSql = "select * from Table_UserType";
SQL_DBManager sql_DBManager = new SQL_DBManager();
dataGridView1.DataSource = sql_DBManager.getDataSet(strSql).Tables[0].DefaultView;
***********************************************************************************
ComboBox的数据绑定:
string strSql = "select * from Table_UserType";
SQL_DBManager sql_DBManager = new SQL_DBManager();
comboBox1.DataSource = sql_DBManager.getDataSet(strSql).Tables[0];
comboBox1.DisplayMember = "UserType";
**********************************************************************************/
}
public DataSet getDataSet(string strSql, string tableName)
{
SqlDataAdapter sda = new SqlDataAdapter(strSql, getConn());
DataSet ds = new DataSet();
sda.Fill(ds,tableName);
closeConnection();
return ds;
/******************************************************************************************************
调用方法:
DataGridView的数据绑定:
string strSql = "select * from Table_UserType";
SQL_DBManager sql_DBManager = new SQL_DBManager();
dataGridView1.DataSource = sql_DBManager.getDataSet(strSql).Tables[Table_UserType].DefaultView;
********************************************************************************************************
ComboBox的数据绑定:
string strSql = "select * from Table_UserType";
SQL_DBManager sql_DBManager = new SQL_DBManager();
comboBox1.DataSource = sql_DBManager.getDataSet(strSql).Tables[Table_UserType];
comboBox1.DisplayMember = "UserType";
*******************************************************************************************************/
}
//根据传入的SQL语句执行并返回一个select查询结果,返回值为NULL或!NULL,用于查询某个值是否存在,例如用来判断用户名和密码的正确性
public object executeGetReturnObject(string strSql) //strSql是传入的SQL命令语句
{
cmd.Connection = getConn(); //命令对象是需要基于一个已经打开了的连接
cmd.CommandText = strSql; //指定数据库命令对象的执行语句
object result = cmd.ExecuteScalar(); //执行命令语句,并将其以字符串的形式返回
closeConnection();
return result;
}
//根据传入的SQL语句执行并返回结果,返回类型为字符串
public string executeGetReturnString(string strSql) //strSql是传入的SQL命令语句
{
cmd.Connection = getConn(); //命令对象是需要基于一个已经打开了的连接
cmd.CommandText = strSql; //指定数据库命令对象的执行语句
string result = cmd.ExecuteScalar().ToString(); //执行命令语句,并将其以字符串的形式返回
closeConnection();
return result;
}
//根据传入的SQL语句执行并返回结果,返回类型为整型
public int executeGetReturnInt(string strSql)//strSql是传入SQL命令语句
{
cmd.Connection = getConn(); //命令对象是需要基于一个已经打开了的连接
cmd.CommandText = strSql; //指定数据库命令对象的执行语句
int resultInt = Convert.ToInt32(cmd.ExecuteScalar());//执行命令语句,并将其以整数的形式返回
closeConnection();
return resultInt;
}
//根据传入的SQL语句,执行ExecuteNonQuery方法,用于UPDATE、INSERT 和 DELETE 语句
//虽然 ExecuteNonQuery 不返回任何行,但映射到参数的任何输出参数或返回值都会用数据进行填充。
//对于 UPDATE、INSERT 和 DELETE 语句,返回值为该命令所影响的行数。对于所有其他类型的语句,返回值为 -1。如果发生回滚,返回值也为 -1。
public int executeNonQuery(string strSql) //strSql是传入的SQL命令语句
{
cmd.Connection = getConn();
cmd.CommandText = strSql;
int i = cmd.ExecuteNonQuery();
closeConnection();
return i;
}
////根据传入的SQL语句执行并返回一个select查询结果,返回一个可查询结果集合,用于分条读取
public SqlDataReader getSqlDataReader(string strSql)
{
cmd.Connection = getConn(); //命令对象是需要基于一个已经打开了的连接
cmd.CommandText = strSql;
SqlDataReader sdr = cmd.ExecuteReader();
return sdr; //注意在此不能关闭数据库连接,否则无法逐条读取数据
/******************************************************************************
调用方法:
string strSql = "select * from Table_UserType";
SQL_DBManager sql_DBManager = new SQL_DBManager();
SqlDataReader sdr=sql_DBManager.getSqlDataReader(strSql);
while(sdr.Read())
{
richTextBox1.Text = sdr["UserType"].ToString();
}
sdr.Close();
sql_DBManager.closeConnection(); //在此必须关闭数据库连接
*******************************************************************************/
}
}
}
这是我总结的一个SQL的调用方法,里面有SQL的各种方法,直接把这个建成一个.CS 文件,把 这个类加进去,这是一个封装的类,加进去可以直接调用
展开全部
就是sql语句有问题,select count(*)得到的是数据行数(一个数),而不是库里的一条记录(记录才包含username,password信息),下面的语句此时会引起outofIndex异常:
userData.UserName = Convert.ToString(reader["username"]);
userData.PassWord = Convert.ToString(reader["password"]);
把sql语句改成select * 就行了
userData.UserName = Convert.ToString(reader["username"]);
userData.PassWord = Convert.ToString(reader["password"]);
把sql语句改成select * 就行了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
问题不是很大,SQL语句错误,你的SQL语句是select count(*) from login where username='"+UserName+"' and password '"+PassWord+"'";查询得到的数据只有一行一列是返回的整行的一个值翻入reader流中,你在后面再用 userData.UserName = Convert.ToString(reader["username"])去流里面取。当然会取不到值。你看看是不是这样
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
上面的朋友的·以及我的·都存在SQL注入攻击的啊...
最好是采用存储过程来做登陆~~~下面的不是利用存储过程的·
try
{
DBHelper.conn.Open();
cmd.Connection = DBHelper.conn;
sqlcmd = "select count(*) from admin where adminname = '" + comList.Text + "' and adminpwd = '" + txtPwd.Text+ "'";
cmd.CommandText = sqlcmd;
int count = Convert.ToInt32(cmd.ExecuteScalar());
if (count != 0)
{
haha = true;
MainForm mf = new MainForm();
mf.Show();
this.Close();
}
else
{
MessageBox.Show("失败");
}
}
catch (Exception ex)
{
MessageBox.Show("请检查网络连接!!");
}
finally
{
DBHelper.conn.Close();
}
最好是采用存储过程来做登陆~~~下面的不是利用存储过程的·
try
{
DBHelper.conn.Open();
cmd.Connection = DBHelper.conn;
sqlcmd = "select count(*) from admin where adminname = '" + comList.Text + "' and adminpwd = '" + txtPwd.Text+ "'";
cmd.CommandText = sqlcmd;
int count = Convert.ToInt32(cmd.ExecuteScalar());
if (count != 0)
{
haha = true;
MainForm mf = new MainForm();
mf.Show();
this.Close();
}
else
{
MessageBox.Show("失败");
}
}
catch (Exception ex)
{
MessageBox.Show("请检查网络连接!!");
}
finally
{
DBHelper.conn.Close();
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
select * from login where username='"+UserName+"' and password '"+PassWord+"'"; 试试
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询