在胜利形式的c sharp中我遇到错误,类似于null引用异常 这是我的代码......而且我在数据库表中找不到任何条目......
public partial class Form1 : Form
{
string strCon, strQry;
SqlConnection con;
SqlCommand cmd;
int rowsaffected;
public Form1()
{
InitializeComponent();
}
box s2 = new box();
class box
{
protected string fname;
protected string lname;
public void name(string s1, string s2)
{
fname = s1;
lname = s2;
}
}
void func(string x, string y)
{
s2.name(x, y);
}
private void btnClick_Click(object sender, EventArgs e)
{
string first = txtFname.Text;
string last = txtLname.Text;
func(first, last);
strQry = "Insert Into Practice Values(" + first + "," + last + " )";
cmd = new SqlCommand(strQry, con);
cmd.Connection.Open();
rowsaffected = cmd.ExecuteNonQuery();
cmd.Connection.Close();
MessageBox.Show(+rowsaffected + " row(s) affected");
}
private void Form1_Load(object sender, EventArgs e)
{
strCon = " Data Source = (local); Initial Catalog = Student; User Id= sa; Password=sa;";
con = new SqlConnection(strCon);
}
抱歉,我没有提到初始化它你的意思是说con = new SqlConnection(strCon);我已经在dat中完成了数据大小写错误是{“在此上下文中不允许使用名称'xyz'。此处只允许使用常量,表达式或变量。不允许使用列名。”}
答案 0 :(得分:3)
您没有实例化con变量,例如:
SqlConnection con = new SqlConnection(connectionString);
答案 1 :(得分:2)
我认为错误发生是因为你使用了con,它没有被初始化。
我没有看到SqlConnection con = new SqlConnection(strCon);
答案 2 :(得分:2)
我打赌你的问题在于连接字符串,连接对象为null。以下是生成和测试连接字符串的快速方法:
文本文件将包含您可以在代码中使用的有效连接字符串。
另外供您参考,我已经简化了您的代码。以下应该更容易调试:
private const string dbConnection = "USE THE UDL STRING HERE";
private void btnClick_Click(object sender, EventArgs e)
{
string first = txtFname.Text;
string last = txtLname.Text;
//I think the orig code was missing the single quotes
string query = string.Format("INSERT INTO Practice ('{0}','{1}')", first, last);
int rowsAffected = 0;
//Using statement will automatically close the connection for you
//Using a const for connection string ensures .NET Connection Pooling
using (SqlConnection conn = new SqlConnection(dbConnection))
{
//Creates a command associated with the SqlConnection
SqlCommand cmd = conn.CreateCommand();
//Set your sql statement
cmd.CommandText = query;
//open the connection
cmd.Connection.Open();
//Execute the connection
rowsAffected = cmd.ExecuteNonQuery();
}
MessageBox.Show(rowsAffected + " rows Affected");
}
答案 3 :(得分:0)
您是否正在设置连接字符串?您似乎正在访问Connection对象,而没有告诉它在何处插入数据。
cmd.Connection.ConnectionString =“some string”;
答案 4 :(得分:0)
我认为您不需要cmd.Connection.Open
和cmd.Connection.Close
cmd
将打开连接&关闭它,以执行查询/存储过程。
答案 5 :(得分:0)
您实际上是在正确创建连接。发生的事情是你看看你的连接字符串
strCon = " Data Source = (local); Initial Catalog = Student; User Id= sa; Password=sa;";
当它尝试连接时,将其读为:
资料来源:“(本地)” 初始目录:“学生” 用户ID =“sa” 密码 - “sa”
因此,等号后面的空格会传递给SQL服务器。你的字符串应该是什么样的
strCon =“Data Source =(local); Initial Catalog = Student; User Id = sa; Password = sa;”
我很确定你永远不会得到与你的数据库的实际连接,但它无声地失败。
答案 6 :(得分:0)
任何时候在有多个调用链接在一起的行上获得空引用,如:
something.somethingElse.somethingElse
将它拆开并检查每一件。例如,在您的情况下,此代码:
cmd = new SqlCommand(strQry, con);
SqlConnection sc = cmd.Connection;
System.Diagnostics.Debug.Assert(sc != null, "You got a null connection from the SqlCommand.");
sc.Open();
可能会证明问题所在。