{
SqlConnection conn = new SqlConnection(strConnection);
SqlCommand myCommand = new SqlCommand("select * from " + strTblName, conn);
SqlDataAdapter myAdapter = new SqlDataAdapter(myCommand );
SqlCommandBuilder myCommandBuilder = new SqlCommandBuilder(myAdapter);
myAdapter.InsertCommand = myCommandBuilder .GetInsertCommand();
try
{
conn.Open();
myAdapter.Update(ds,strTblName);
ds.AcceptChanges();
conn.Close();
return ds; //数据集的行状态在更新后会都变为: UnChange,在这次更新后客户端要用返回的ds
}
catch(Exception err)
{
conn.Close();
throw err;
}
}
为什么这段代码执行过后数据库里并没有插入任何记录啊!~(代码网上转的)谢谢大哥们帮我找找那里错啊!~ 找出来马上给分
小弟谢谢了
十万火急啊!~
11 个解决方案
#1
-_-! 好像在Winform里面用的吧。
#2
没有看到有insert 的sql语句啊,
上面是select 查询吧
上面是select 查询吧
#3
参考:
http://www.cnblogs.com/slcfhr/archive/2006/07/20/455579.html
http://dev.csdn.net/article/75832.shtm
http://www.cnblogs.com/slcfhr/archive/2006/07/20/455579.html
http://dev.csdn.net/article/75832.shtm
#4
顶
#5
SqlDataAdapter ad = new SqlDataAdapter("select top 1 * from users where 1<>1", sqlconn);//取个结构
DataTable dt = new DataTable();
SqlCommandBuilder cmb = new SqlCommandBuilder(ad);//这一句很关键,必不可少。
ad.Fill(dt);
int i;
for (i = 1; i < 10; i++)
{
DataRow dr = dt.NewRow();
dr["uid"] = "nid" + i.ToString();
dt.Rows.Add(dr);
}
ad.Update(dt);
Fill方法可以自动的打开关闭数据库,不用自己写OPEN的~
#6
给你我的测试过程~~
1.建立表test~表中只有一列ID,int型~
2.建立控制台项目InsertData~
3.代码如下~
运行后test表中有10行新加入数据~
OVER~
1.建立表test~表中只有一列ID,int型~
2.建立控制台项目InsertData~
3.代码如下~
using System;
using System.Collections.Generic;
using System.Text;
using System.Data.SqlClient;
using System.Data;
namespace InsertData
{
class Program
{
static void Main(string[] args)
{
string sqlconn = "server=127.0.0.1;user id=sa;password=xxx;database=test;";
SqlDataAdapter ad = new SqlDataAdapter("select top 1 * from test where 1<>1", sqlconn);//取个结构
DataTable dt = new DataTable();
SqlCommandBuilder cmb = new SqlCommandBuilder(ad);//这一句很关键,必不可少。
ad.Fill(dt);
for (int i = 1; i < 10; i++)
{
DataRow dr = dt.NewRow();
dr["id"] = i;
dt.Rows.Add(dr);
}
ad.Update(dt);
Console.WriteLine("OK");
Console.Read();
}
}
}
运行后test表中有10行新加入数据~
OVER~
#7
up!楼上!
#8
行状态不对呗.确保你传入的ds中DataRow的行状态为Added.
#9
public DataSet UpdateByDataSet(DataSet ds,string strTblName,string strConnection)
{
SqlConnection conn = new SqlConnection(strConnection);
SqlCommand myCommand = new SqlCommand("select * from " + strTblName, conn);
SqlDataAdapter myAdapter = new SqlDataAdapter(myCommand );
SqlCommandBuilder myCommandBuilder = new SqlCommandBuilder(myAdapter);
myAdapter.InsertCommand = myCommandBuilder .GetInsertCommand();
try
{
foreach(DataRow dr in ds.Tables[0].Rows)
{
dr.SetAdded();//.net 2.0以上版本才有,如果你是.net 1.1那没此方法
}//加上这段代码后看能插入吗.这个是把行状态置成了Added
conn.Open();
myAdapter.Update(ds,strTblName);
ds.AcceptChanges();
conn.Close();
return ds; //数据集的行状态在更新后会都变为: UnChange,在这次更新后客户端要用返回的ds
}
catch(Exception err)
{
conn.Close();
throw err;
}
}
#10
正如6楼代码那样.先填充一个空的DataTable,然后再向table中添加行.这样每个行的行状态都会是Added
只有行状态对了.才会调用相应的sql语句去执行命令.
另外还要确保你的SqlCommandBuilder 能正确生成insert语句
只有行状态对了.才会调用相应的sql语句去执行命令.
另外还要确保你的SqlCommandBuilder 能正确生成insert语句
#11
我空间有个现成实例,你看看!
http://113620916.qzone.qq.com/infocenter?ADUIN=113620916&ADSESSION=1231373422&ADTAG=CLIENT.QQ.1881_QQUrlReportBlankZone.0
http://113620916.qzone.qq.com/infocenter?ADUIN=113620916&ADSESSION=1231373422&ADTAG=CLIENT.QQ.1881_QQUrlReportBlankZone.0
#1
-_-! 好像在Winform里面用的吧。
#2
没有看到有insert 的sql语句啊,
上面是select 查询吧
上面是select 查询吧
#3
参考:
http://www.cnblogs.com/slcfhr/archive/2006/07/20/455579.html
http://dev.csdn.net/article/75832.shtm
http://www.cnblogs.com/slcfhr/archive/2006/07/20/455579.html
http://dev.csdn.net/article/75832.shtm
#4
顶
#5
SqlDataAdapter ad = new SqlDataAdapter("select top 1 * from users where 1<>1", sqlconn);//取个结构
DataTable dt = new DataTable();
SqlCommandBuilder cmb = new SqlCommandBuilder(ad);//这一句很关键,必不可少。
ad.Fill(dt);
int i;
for (i = 1; i < 10; i++)
{
DataRow dr = dt.NewRow();
dr["uid"] = "nid" + i.ToString();
dt.Rows.Add(dr);
}
ad.Update(dt);
Fill方法可以自动的打开关闭数据库,不用自己写OPEN的~
#6
给你我的测试过程~~
1.建立表test~表中只有一列ID,int型~
2.建立控制台项目InsertData~
3.代码如下~
运行后test表中有10行新加入数据~
OVER~
1.建立表test~表中只有一列ID,int型~
2.建立控制台项目InsertData~
3.代码如下~
using System;
using System.Collections.Generic;
using System.Text;
using System.Data.SqlClient;
using System.Data;
namespace InsertData
{
class Program
{
static void Main(string[] args)
{
string sqlconn = "server=127.0.0.1;user id=sa;password=xxx;database=test;";
SqlDataAdapter ad = new SqlDataAdapter("select top 1 * from test where 1<>1", sqlconn);//取个结构
DataTable dt = new DataTable();
SqlCommandBuilder cmb = new SqlCommandBuilder(ad);//这一句很关键,必不可少。
ad.Fill(dt);
for (int i = 1; i < 10; i++)
{
DataRow dr = dt.NewRow();
dr["id"] = i;
dt.Rows.Add(dr);
}
ad.Update(dt);
Console.WriteLine("OK");
Console.Read();
}
}
}
运行后test表中有10行新加入数据~
OVER~
#7
up!楼上!
#8
行状态不对呗.确保你传入的ds中DataRow的行状态为Added.
#9
public DataSet UpdateByDataSet(DataSet ds,string strTblName,string strConnection)
{
SqlConnection conn = new SqlConnection(strConnection);
SqlCommand myCommand = new SqlCommand("select * from " + strTblName, conn);
SqlDataAdapter myAdapter = new SqlDataAdapter(myCommand );
SqlCommandBuilder myCommandBuilder = new SqlCommandBuilder(myAdapter);
myAdapter.InsertCommand = myCommandBuilder .GetInsertCommand();
try
{
foreach(DataRow dr in ds.Tables[0].Rows)
{
dr.SetAdded();//.net 2.0以上版本才有,如果你是.net 1.1那没此方法
}//加上这段代码后看能插入吗.这个是把行状态置成了Added
conn.Open();
myAdapter.Update(ds,strTblName);
ds.AcceptChanges();
conn.Close();
return ds; //数据集的行状态在更新后会都变为: UnChange,在这次更新后客户端要用返回的ds
}
catch(Exception err)
{
conn.Close();
throw err;
}
}
#10
正如6楼代码那样.先填充一个空的DataTable,然后再向table中添加行.这样每个行的行状态都会是Added
只有行状态对了.才会调用相应的sql语句去执行命令.
另外还要确保你的SqlCommandBuilder 能正确生成insert语句
只有行状态对了.才会调用相应的sql语句去执行命令.
另外还要确保你的SqlCommandBuilder 能正确生成insert语句
#11
我空间有个现成实例,你看看!
http://113620916.qzone.qq.com/infocenter?ADUIN=113620916&ADSESSION=1231373422&ADTAG=CLIENT.QQ.1881_QQUrlReportBlankZone.0
http://113620916.qzone.qq.com/infocenter?ADUIN=113620916&ADSESSION=1231373422&ADTAG=CLIENT.QQ.1881_QQUrlReportBlankZone.0