这是我的连接课程
class connection
{
public SqlConnection con;
public SqlCommand cmd;
public SqlDataAdapter sda;
String pkk;
public void connectionFunc()
{
con = new SqlConnection(@"Data Source=.;Initial Catalog=payroll;Integrated Security=True");
con.Open();
}
public void dataSend(String SQL)
{
try
{
connectionFunc();
cmd = new SqlCommand(SQL, con);
cmd.ExecuteNonQuery();
pkk = "";
}
catch(Exception)
{
pkk = "error";
}
con.Close();
}
public void dataGet(String SQL)
{
try
{
connectionFunc();
sda = new SqlDataAdapter(SQL, con);
}
catch(Exception)
{
}
}
}
这是该类的使用:
connection con = new connection();
con.dataGet("Select * from [users] Where Userame = '" + textBox1.Text + "' and Password = '" + textBox2.Text + "'");
DataTable dt = new DataTable();
// this line throws an error
con.sda.Fill(dt);
if(dt.Rows.Count > 0)
{
this.Hide();
Mainpage obj = new Mainpage();
obj.Show();
}
else
{
MessageBox.Show("Invalid UserName Or Password..!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
我收到以下错误:
Payroll_Manegement.exe中发生了'System.NullReferenceException'类型的未处理异常
我不知道如果有人可以帮助我,这将是什么大问题。
回答您的问题:该错误来自以下事实:您的DataTable仅在SqlDataAdapter.Fill被激发之前被实例化,而不被填充,因此,当后者尝试执行有用的操作时,它只能返回一个解释确切错误的异常。
您的连接类会因不安全的变量范围(为什么在所有地方都使用public?)和不存在的连接池而使我痛苦。使用这样的类会为各种不安全的恐怖打开您的应用程序。如果您的应用程序不太复杂,请尝试使事情保持简单;.NET Framework的基础知识已经足以满足您的目的。只需执行与以下代码类似的操作(就查询的参数化而言,就像其他建议的一样):
string connectionString = "server=myServer;User ID=myUser;Password=myPwd;"; // could also be internal static on class level
string theQuery = "SELECT * FROM dbo.Users WHERE Username = @userName AND Password = @password";
using (SqlConnection sqlConnection = new SqlConnection(connectionString))
{
sqlConnection.Open();
using (SqlCommand sqlCommand = new SqlCommand(theQuery, sqlConnection))
{
sqlCommand.Parameters.AddWithValue("@userName", textBox1.Text);
sqlCommand.Parameters.AddWithValue("@password", textBox2.Text);
DataTable dataTable = new DataTable();
dataTable.Load(sqlCommand.ExecuteReader());
if (dataTable.Rows > 0)
{
SqlDataAdapter sqlDataAdapter = new SqlDataAdapter();
sqlDataAdapter.Fill(dataTable);
}
}
}
另外,对于更复杂的应用程序,您可以首先学习Entity Framework https://docs.microsoft.com/zh-cn/ef/ef6/get-started,并进行不重新发明轮子的训练。适应需要一些时间,但确实会有所收获。
祝您改善代码!
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。