我的SQL2000数据库的一个表没有主键,用DataSet很难做到自动同步数据库。原贴地址:http://topic.csdn.net/u/20110723/10/0d9bf468-d6e4-4485-9c7d-5b213cf5cafb.html于是我想用SQLDataReader一条一条的判断记录是否是需要更新的记录,然后用和SQLCommand进行修改。
然而最后用和SQLCommand要进行更新时出现了提示“已有打开的与此连接相关联的 DataReader,必须首先将它关闭。”如果关闭也就不能更新了,不知如何解决。我试看建立两个SQLDataReader,也是不行,请高手指教:using System;
using System.Data;
using System.Data.SqlClient;namespace ConsoleApplication2
{
/// <summary>
/// Class1 的摘要说明。
/// </summary>
class Class1
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main(string[] args)
{
//
// TODO: 在此处添加代码以启动应用程序
int i=0;
string myConnectionString="Server=.;database=hq2;uid=sa;pwd=";
string TimeString,CommandTime;
SqlConnection myConnection=new SqlConnection(myConnectionString);
SqlCommand myCommand=myConnection.CreateCommand();
myCommand.CommandText="select ValueID,TimeStamp,RealValue,sn from tag ";
myConnection.Open();
SqlDataReader myDataReader=myCommand.ExecuteReader(); //查看状态
Console.WriteLine("Flag {0} \n",myDataReader.Read());
while(myDataReader.Read())
{
if ((int)myDataReader["ValueID"]==14)
{
TimeString=myDataReader["TimeStamp"].ToString();
CommandTime="update tag set sn="+i.ToString() +" where TimeStamp=="+"'"+TimeString+"'" +" and ValueID=14";
myCommand.CommandText=CommandTime; //下面这条语句不能执行,提示“已有打开的与此连接相关联的 DataReader,必须首先将它关闭。”要怎么办呢?怎样才能实现更新?
myCommand.ExecuteNonQuery();
i++;
//查看命令文本
Console.WriteLine("Done! \n {0}",myCommand.CommandText);
}
}
myConnection.Close();
myDataReader.Close();
Console.WriteLine(" \n i= {0} \nDone!Press Enter key to exit! \n",i);
Console.Read();
//
}
}
}
然而最后用和SQLCommand要进行更新时出现了提示“已有打开的与此连接相关联的 DataReader,必须首先将它关闭。”如果关闭也就不能更新了,不知如何解决。我试看建立两个SQLDataReader,也是不行,请高手指教:using System;
using System.Data;
using System.Data.SqlClient;namespace ConsoleApplication2
{
/// <summary>
/// Class1 的摘要说明。
/// </summary>
class Class1
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main(string[] args)
{
//
// TODO: 在此处添加代码以启动应用程序
int i=0;
string myConnectionString="Server=.;database=hq2;uid=sa;pwd=";
string TimeString,CommandTime;
SqlConnection myConnection=new SqlConnection(myConnectionString);
SqlCommand myCommand=myConnection.CreateCommand();
myCommand.CommandText="select ValueID,TimeStamp,RealValue,sn from tag ";
myConnection.Open();
SqlDataReader myDataReader=myCommand.ExecuteReader(); //查看状态
Console.WriteLine("Flag {0} \n",myDataReader.Read());
while(myDataReader.Read())
{
if ((int)myDataReader["ValueID"]==14)
{
TimeString=myDataReader["TimeStamp"].ToString();
CommandTime="update tag set sn="+i.ToString() +" where TimeStamp=="+"'"+TimeString+"'" +" and ValueID=14";
myCommand.CommandText=CommandTime; //下面这条语句不能执行,提示“已有打开的与此连接相关联的 DataReader,必须首先将它关闭。”要怎么办呢?怎样才能实现更新?
myCommand.ExecuteNonQuery();
i++;
//查看命令文本
Console.WriteLine("Done! \n {0}",myCommand.CommandText);
}
}
myConnection.Close();
myDataReader.Close();
Console.WriteLine(" \n i= {0} \nDone!Press Enter key to exit! \n",i);
Console.Read();
//
}
}
}
解决方案 »
- c# datagridview回车后光标跳转指定单元格问题 急
- 怎样在C#中画表格?像VB一样。
- 请问我这样这样命名文件名是否可行?
- CRC运算,十进制int型数据转换成十六进制byte型数据的方法,急急急
- 这个事件为什么还会被执行?
- 关于Excel 的问题。。
- c#怎样得到另一个程序中显示的文本框中的内容?
- 在windows Form中怎样在两个窗口中传递参数?
- 关于在Datagrid中得到checkbox选中的值,并传递到另一个页面的问题?
- 求vs.net图书,英文版
- 求一本C#教科书
- BindingList,DevExpress/GridControl,MS/dataGridView,序列化/反序列化,XML文件
using System.Data;
using System.Data.SqlClient;namespace ConsoleApplication2
{ class Class1
{
[STAThread]
static void Main(string[] args)
{
int i = 0;
string myConnectionString = "Server=.;database=hq2;uid=sa;pwd=";
string TimeString, CommandTime;
SqlConnection myConnection = new SqlConnection(myConnectionString);
myConnection.Open();
SqlCommand myCommand = myConnection.CreateCommand();
TimeString = "select ValueID,TimeStamp,RealValue,sn from tag ";
SqlDataAdapter adapter = new SqlDataAdapter(TimeString, myConnection);
DataSet ds = new DataSet();
adapter.Fill(ds);
//查看状态
Console.WriteLine("Flag {0} \n", ds.Tables[0].Rows.Count);
if (ds.Tables[0].Rows.Count > 0)
{
foreach (DataRowView drv in ds.Tables[0].DefaultView)
{
if ((int)drv["ValueID"] == 14)
{ TimeString = drv["TimeStamp"].ToString();
CommandTime = "update tag set sn=" + i.ToString() + " where TimeStamp==" + "'" + TimeString + "'" + " and ValueID=14";
myCommand.Connection = myConnection;
myCommand.CommandText = CommandTime;
//下面这条语句不能执行,提示“已有打开的与此连接相关联的 DataReader,必须首先将它关闭。”要怎么办呢?怎样才能实现更新?
myCommand.ExecuteNonQuery();
i++;
//查看命令文本
Console.WriteLine("Done! \n {0}", myCommand.CommandText);
}
}
}
myConnection.Close();
Console.WriteLine(" \n i= {0} \nDone!Press Enter key to exit! \n", i);
Console.Read();
}
}
}
可以考虑 SqlCommandBuilder 自动生成单表命令,用于将对 DataSet 所做的更改与关联的 SQL Server 数据库的更改相协调。无法继承此类。
因为SqlDataReader 是长连接的。
CommandText = "Update Tag set RealValue=(SELECT RealValue FROM Tag WHERE ValueID = 18 AND TimeStamp = '" + TimeString + " ') - (SELECT RealValue FROM Tag WHERE ValueID = 19 AND TimeStamp = '" + TimeString +" ') where ValueID=20";运行后结果不正确呀,是怎么回事?
18 2011-1-30 9:00:00 234 1158.42016601563 128 8392704 1
19 2011-1-30 9:00:00 234 43.3449058532715 128 8392704 1
20 2011-1-30 9:00:00 234 1118.14240264893 128 8392704 1
18 2011-1-30 9:10:00 234 1130.20837402344 128 8392704 1
19 2011-1-30 9:10:00 234 43.4606475830078 128 8392704 1
20 2011-1-30 9:10:00 234 1118.14240264893 128 8392704 1
18 2011-1-30 9:20:00 234 1151.90966796875 128 8392704 1
19 2011-1-30 9:20:00 234 42.8240737915039 128 8392704 1
20 2011-1-30 9:20:00 234 1118.14240264893 128 8392704 1
18 2011-1-30 9:30:00 234 1145.83337402344 128 8392704 1
19 2011-1-30 9:30:00 234 49.6527786254883 128 8392704 1
20 2011-1-30 9:30:00 234 1118.14240264893 128 8392704 1
18 2011-1-30 9:40:00 234 1124.56591796875 128 8392704 1
19 2011-1-30 9:40:00 234 49.1898155212402 128 8392704 1
20 2011-1-30 9:40:00 234 1118.14240264893 128 8392704 1
18 2011-1-30 9:50:00 234 1145.39929199219 128 8392704 1
19 2011-1-30 9:50:00 234 48.7847213745117 128 8392704 1
20 2011-1-30 9:50:00 234 1118.14240264893 128 8392704 1
18 2011-1-30 10:00:00 234 1136.28466796875 128 8392704 1
19 2011-1-30 10:00:00 234 48.7268524169922 128 8392704 1
20 2011-1-30 10:00:00 234 1118.14240264893 128 8392704 1
if ((int)drv["ValueID"] == 14)
你已经过滤出来ValueID是14的值了,后面循环里你的
CommandText = "Update Tag set RealValue=(SELECT RealValue FROM Tag WHERE ValueID = 18 AND TimeStamp = '" + TimeString + " ') - (SELECT RealValue FROM Tag WHERE ValueID = 19 AND TimeStamp = '" + TimeString +" ') where ValueID=20";这些里的判断都是无效的了。
目的是把所有ID为20的数据值替换成相同时间段内ID是18和19两个数据值的和。
要如何实现?有时间段在限制,为什么还是相同的结果呀?