向数据库插入数据,更新datagridview问题,与数据库同步

爱摄影的漠北 2016-06-30 10:43:30

程序开始运行时,dgv显示数据库的内容,当我向数据库插入数据时,gdv更新的内容并不是插入的值,而是在原来的基础上新增现在数据库的值。。。
我通过dgv的属性datasource绑定了数据源,求大侠帮我看下是哪里出问题啦


public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
}
private delegate void myDelegate(DataTable dt);//定义委托
DataTable DT = new DataTable();
private SqlDataAdapter da = null;
private BindingSource bindingSource1 = null;

private void MainForm_Load(object sender, EventArgs e)
{
//开线程
myThread = new Thread(startThread);
myThread.IsBackground = true;
myThread.Start();
}
private void startThread()
{
DataTable dt1 = GetDataTable();
Grid(dt1);
while (true)
{
if (Createtb.isInsert)//当有数据插入时进入
{
DataTable dt = GetDataTable();
Grid(dt);
Createtb.isInsert = false;
}
Thread.Sleep(3000);
}

}

private void Grid(DataTable dt)
{
if (this.InvokeRequired)//等待异步
{
this.Invoke(new myDelegate(Grid), new object[] { dt });
}
else
{
try
{
this.Dgv_SQLData.DataSource = null;
this.Dgv_SQLData.DataSource = dt;
bindingSource1 = new BindingSource();
bindingSource1.DataSource = dt;

dt = null;
}
catch (Exception)
{

throw (new System.Exception());
}
}
}


private DataTable GetDataTable()
{
string strConn = "";
strConn = GetDBConnStr();
SqlConnection myConn = new SqlConnection();
myConn.ConnectionString = strConn;

da = new SqlDataAdapter();
string tmp = "";
string strTBName = "";
strTBName = Global.g_strTBName;
tmp = string.Format("select * from {0}", strTBName);

SqlCommand cmd1 = new SqlCommand(tmp, myConn);//sql语句
da.SelectCommand = cmd1;//设置为已实例化SqlDataAdapter的查询命令
da.Fill(DT);//把数据填充到dataset

return DT;
}

/// <summary>
/// 连接字符串
/// </summary>
/// <returns></returns>
private string GetDBConnStr()
{
string strTemp ="";
string strDBName = Global.g_strDBName;
strTemp = string.Format(("Data Source=TX-PC\\SQLEXPRESS;Initial Catalog={0};Integrated Security=True"), strDBName);
return strTemp;
}

//button按键
private void button1_Click(object sender, EventArgs e)
{
string strDBName = "";
string strTBName = "";
strDBName = Global.g_strDBName;
strTBName = Global.g_strTBName;
Createtb.InsertTable(strTBName, strDBName);
//当点击测量时,开启线程,从OPC服务器接收到数据的时候,就向数据库插入数据,并且更新到datagridview
}


/// <summary>
/// 向数据库写内容
/// </summary>
privat void InsertTable(string strTBName, string strDBName)
{
//判断是否连接,向表里写入数据
string strConn = "";
strConn = GetDBConnStr();
SqlConnection myConn = new SqlConnection();
myConn.ConnectionString = strConn;

if (myConn.State == ConnectionState.Open)
myConn.Close();
string ConnectionString = string.Format(("Data Source=TX-PC\\SQLEXPRESS;Initial Catalog={0};Integrated Security=True"), strDBName);
myConn.ConnectionString = ConnectionString;
if (myConn.State != ConnectionState.Open)
myConn.Open();

InsertSql = string.Format("INSERT INTO {0} ({1}) VALUES ({2})", strTBName, "宽度", 66);
cmd = new SqlCommand(InsertSql, myConn);
cmd.ExecuteNonQuery();
isInsert = true;
}
}
...全文
252 12 打赏 收藏 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
爱摄影的漠北 2016-07-01
  • 打赏
  • 举报
回复
引用 6 楼 xdashewan 的回复:
[quote=引用 3 楼 qq_24384237 的回复:] 恩我改了,还是不得行。
你断点在绑定前看下datatable里数据是否正确[/quote] 我清空了就好了,就是dgv数据加载有点慢,谢谢你。
爱摄影的漠北 2016-07-01
  • 打赏
  • 举报
回复
引用 6 楼 xdashewan 的回复:
[quote=引用 3 楼 qq_24384237 的回复:] 恩我改了,还是不得行。
你断点在绑定前看下datatable里数据是否正确[/quote] 恩数据不对的。原来有一条数据,我向数据库里插入一条数据,就变成3条数据了,是不是每次应该吧datatable清空呢。
爱摄影的漠北 2016-07-01
  • 打赏
  • 举报
回复
引用 5 楼 qq_17486399 的回复:
你重新绑定数据源。。。。
绑了的啊
xdashewan 2016-07-01
  • 打赏
  • 举报
回复
引用 3 楼 qq_24384237 的回复:
恩我改了,还是不得行。
你断点在绑定前看下datatable里数据是否正确
wanghui0380 2016-07-01
  • 打赏
  • 举报
回复
编写updateCommand 命令,然后adapter.update 就可以了
大鱼> 2016-07-01
  • 打赏
  • 举报
回复
引用 7 楼 qq_24384237 的回复:
[quote=引用 5 楼 qq_17486399 的回复:] 你重新绑定数据源。。。。
绑了的啊[/quote] 或者清空
大鱼> 2016-07-01
  • 打赏
  • 举报
回复
引用 7 楼 qq_24384237 的回复:
[quote=引用 5 楼 qq_17486399 的回复:] 你重新绑定数据源。。。。
绑了的啊[/quote] 重新绑定,原来的datatable舍弃。
xdashewan 2016-06-30
  • 打赏
  • 举报
回复
首先绑定了数据源你还把dt给清空了,其次既然有了全局的DataTable DT,还用局部引用去指向它没有必要
爱摄影的漠北 2016-06-30
  • 打赏
  • 举报
回复
快来人啦。。UP
大鱼> 2016-06-30
  • 打赏
  • 举报
回复
你重新绑定数据源。。。。
爱摄影的漠北 2016-06-30
  • 打赏
  • 举报
回复
亲们,帮我看看啊。gdv现在的内容并不是插入的值,而是在原来的基础上新增现在数据库的值。。。是不是要先clear ,到时dgv绑定了不能清理。
爱摄影的漠北 2016-06-30
  • 打赏
  • 举报
回复
引用 2 楼 xdashewan 的回复:
首先绑定了数据源你还把dt给清空了,其次既然有了全局的DataTable DT,还用局部引用去指向它没有必要
恩我改了,还是不得行。

111,128

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧