C#多表插入,和datagridview多表修改。

2024-12-27 19:44:42
推荐回答(3个)
回答1:

insert into 表B('typeID','name') values('3','蓝色')

添加外见表数据时,只要外键(select typeID from 表b where typeID in (select id from 表a)中就行了,其他没有什么关系,

update 表b set name='zhang san' where id=3
update 表 a set type='li si' where id=(selelct typeID from 表b where 表b的id =3)
这样就插入更新了,在连上 数据库就行了。
写个DBHelper辅助类就行了,

回答2:

有几项疑点:
1.你将两个文本框的值添加到数据库表baojia中,用不用datagridview?单纯的添加吗?
如果是,那很简单:
SqlConnection con=new SqlConnection("数据库连接字符串");
SqlCommand cmd=new SqlCommand("insert into baojia(列名1,列名2) values('"+this.textBox1.Text.Trim()+"','"+this.textBox2.Text.Trim()+"')",con);
cmd.ExecuteNonQuery();//执行添加操作,这里也可以判断一下返回值,看是否已经添加到数据库中.
MessageBox.Show("添加成功");

2.将datagridview刚添加的几条记录添加到数据库表baojiazsj中。这个相比刚才的麻烦了一点。一般情况下最好不要手动在datagridview里更改数据.如果你执意要做,只有以下这样:

我是这样处理的:

先绑定数据源:(在Form_Load事件中写)
SqlConnection con=new SqlConnection("数据库连接字符串");
SqlDataAdapter da = new SqlDataAdapter("select * from baojiazsj",con);
DataSet ds=new DataSet();
da.Fill(ds,"baojiazsj");

在更新按钮的Click事件中写:
if (ds.HasChanges())//判断当前datagridview中的baojiazsj表是否发生更改
{
DataSet ds1 = ds.GetChanges(DataRowState.Added);//这句是判断datagridview中是否手动添加记录了,还没有更新到数据库中.
if (ds1!=null)
{
DataTable dt = ds1.Tables["baojiazsj"];//获取新添加的几条记录,然后赋值给一个DataTable
//接下来你要做的就是遍历该表
foreach (DataRow dr in dt.Rows)
{
//此略
SqlCommand cmd=new SqlCommand("insert into baojia(列名1,列名2) values('"+this.textBox1.Text.Trim()+"','"+this.textBox2.Text.Trim()+"')",con);
cmd.ExecuteNonQuery();//执行添加操作,一条一条添加到数据库表中.
}
}
}

ds.GetChanges(DataRowState.Added);//这个方法里的参数还有其它,你查查MSDN就明白了。

写了这么多,不知道能否帮助到你。

回答3:

写个事物!把两个sql语句放到LIst中一起提交!更新也已样
List list = new List();
list sql1 = choosecontentBll.AddList(choosecontenInfo);
list.Add(sql1);
list sql2 = choosecontentBll.AddList(choosecontenInfo);
list.Add(sql2);
int resu = choosecontentBll.Returns(list) //一起提交
事物的方法:
public static int Returns(List li)
{
int i = 0;
using (SqlConnection conn = new SqlConnection(connectionString))
{
conn.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
SqlTransaction tx = conn.BeginTransaction();
cmd.Transaction = tx;
try
{

for (int n = 0; n < li.Count; n++)
{
string strsql = li[n].Str.ToString();
SqlParameter[] par = li[n].Para;
if (strsql.Trim().Length > 1)
{
cmd.CommandText = strsql;
if (par != null)
{
cmd.Parameters.Clear();
foreach (SqlParameter parm in par)
cmd.Parameters.Add(parm);
}
i = cmd.ExecuteNonQuery();

}
}

tx.Commit();

}
catch (System.Data.SqlClient.SqlException E)
{
tx.Rollback();
return 0;
throw new Exception(E.Message);

}

}
return i;
}
一旦扯到多表同时操作的时候,是必须用事物的,要不然就不伦不类的了
你说的 多表联查,我知道,但是修改的时候你改把修改后的值忘那个表中插入都行,
事物的方法给你了,你直接调用即可!其他的方法不用变!