我最近查看了一个关于如何使用c#-class运行sql-commands和获取数据的youtube教程。这是我所遵循的教程:https://www.youtube.com/watch?v=WG3Hwk7Yp48#t=13m42s在13:42您可以看到他运行他的代码,将名称值插入文本框,然后能够在组合框中显示新值。
但是,每当我运行我的代码时,我都会收到此错误(可提供完整图片here):
我尝试收集/插入数据的表格中有一个' unr' int不能为null,名称为varchar。
这是我的SQL-DAL:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
using System.Data.SqlClient;
using System.Data.Sql;
namespace WindowsFormsApplication3
{
class DAL
{
private SqlConnection con;
public SqlCommand cmd;
private SqlDataAdapter da;
private DataTable dt;
public DAL()
{
con = new SqlConnection(@"Data Source=VIKTOR-PC;Initial Catalog=HT2015;Integrated Security=True");
con.Open();
}
public void SqlQuery(string queryText)
{
cmd = new SqlCommand(queryText, con);
}
public DataTable QueryEx()
{
da = new SqlDataAdapter(cmd);
dt = new DataTable();
da.Fill(dt);
return dt;
}
public void NoQueryEx()
{
cmd.ExecuteNonQuery();
}
}
这是我的表格:
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;
namespace WindowsFormsApplication3
{
public partial class Form1 : Form
{
private WindowsFormsApplication3.DAL con;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
con = new DAL();
con.SqlQuery("INSERT INTO dbo.Users(name) VALUES (@NameP)");
con.cmd.Parameters.Add("@NameP", textBox1.Text);
con.NoQueryEx();
con.SqlQuery("SELECT name FROM Users");
comboBox1.Items.Clear();
foreach(DataRow dr in con.QueryEx().Rows)
{
comboBox1.Items.Add(dr[1].ToString());
}
}
}
}
现在它一直说unr为null,我想要的只是向表中添加新名称。我还没有找到解决这个问题的线索。
答案 0 :(得分:1)
您的表格Users
有不可空列unr
。
但您正在使用此查询:
INSERT INTO dbo.Users(name) VALUES (@NameP)
不会在unr
中插入任何内容 - 这就是您获得该异常的原因。
您应该在查询中向unr
插入一些内容,或者在表定义中使其可以为空(或具有一些默认值)。