选修的数据库课程用C#做一个前端实现数据库的更改和删除,刚开始学照着书敲了一段代码,运行的时候点击更改就会出现以下错误提示,是我的数据库连接有什么问题吗?求教各位大佬
代码如下
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 FFFinalhomework
{
public partial class 管理界面 : Form
{
private SqlConnection mycon;
private SqlDataAdapter myada;
private SqlCommand mycomd;
private SqlCommandBuilder mycbd;
private DataSet myset;
public 管理界面()
{
InitializeComponent();
mycon = new SqlConnection("Data Source=DESKTOP-LBROENH;Initial Catalog=Finalhomework;Integrated Security=True");
mycon.Open();
mycomd = new SqlCommand("select*from DongMan", mycon);
myada = new SqlDataAdapter();
myada.SelectCommand = mycomd;
mycbd = new SqlCommandBuilder(myada);
myset = new DataSet();
myada.TableMappings.Add("DongMan", "DongMan");
myada.TableMappings[0].ColumnMappings.Add("D#", "动漫编号");
myada.TableMappings[0].ColumnMappings.Add("DN", "动漫名称");
myada.TableMappings[0].ColumnMappings.Add("DT", "动漫类型");
myada.TableMappings[0].ColumnMappings.Add("DP", "主演声优");
myada.TableMappings[0].ColumnMappings.Add("DD", "上映日期");
}
private void button1_Click(object sender, EventArgs e)
{
try
{
myada.Update(myset.Tables["DongMan"].GetChanges());
MessageBox.Show("数据修改成功", "666");
myset.Tables["student"].AcceptChanges();
}
catch (SqlException ex)
{
MessageBox.Show(ex.ToString());
}
}
private void 管理界面_Load(object sender, EventArgs e)
{
try
{
myada.Fill(myset, "DongMan");
}
catch (SqlException ex)
{
MessageBox.Show(ex.ToString());
}
finally
{
mycon.Close();
}
dataGridView1.DataSource = myset.Tables["DongMan"].DefaultView;
}
private void button2_Click(object sender, EventArgs e)
{
if (MessageBox.Show("确认删除当前行数据?", "", MessageBoxButtons.OKCancel) == DialogResult.OK)
{
try
{
myset.Tables[0].Rows[dataGridView1.CurrentRow.Index].Delete();
if (myset != null && myset.Tables.Count > 0)
{
myada.Update(myset.Tables[0].GetChanges());
MessageBox.Show("数据删除成功");
myset.Tables[0].AcceptChanges();
}
}
catch (SqlException ex)
{
MessageBox.Show(ex.ToString());
}
}
else
{
myset.Tables[0].RejectChanges();
}
}
private void 管理界面_Load_1(object sender, EventArgs e)
{
// TODO: 这行代码将数据加载到表“finalhomeworkDataSet.DongMan”中。您可以根据需要移动或删除它。
this.dongManTableAdapter.Fill(this.finalhomeworkDataSet.DongMan);
}
}
}
你的catch语句指定了具体的异常,所以只会处理这个异常,很显然是出现了其他异常所以直接报错了,你可以把这个异常写成Exception,所有的异常都处理就好了。
这个异常的意思就是 你有不能为空的值为空了 他提示了那个位置 加个断点看一下
myada = new SqlDataAdapter();
myada.SelectCommand = mycomd;
mycbd = new SqlCommandBuilder(myada);
myset = new DataSet();
这个地方啊,我用SqlLite写的时候一般还要有一句
myada.Fill( myset);//意思是sql语句查出来大数据,填到表里
你这里没有这句,不知道是不是原因(不过如果你是照课本敲的,应该不会犯这种低级错误)
我建议你,把这句myada.Update(myset.Tables["DongMan"].GetChanges())改下;
var t=myset.Tables["DongMan"];
var changes=myset.Tables["DongMan"].GetChanges();
加断点,看看到底哪里是空