我是个数据库初学者,买了一本电子工业出版社的《Viual Studio2005+SQL Server2005数据库应用系统开发》自学。学到如何更新DataSet数据的方法时,发现书中的源程序在运行后不能达到书中所说的功能:“执行后,可将学号为2002080520的记录的T_S_NAME字段的值更改为设定的“王小军”,并将结果提交到数据源中的T_STUDENT表中”,而只是将数据源中表T_STUDENT的第一行记录的T_S_NAME字段的值更改了,并不涉及学号为多少。以下是书中源代码,请各位高手帮我看看,是否是书中的印刷错误抑或是别的,究竟将如何实现这一功能啊。谢谢!源代码如下:
//引用系统命名空间
using System;
using System.Data;
using System.Data.SqlClient;
//项目生成的命名空间
namespace ConsoleApplication2
{
//项目中的类
class Program
{
//项目执行入口
static void Main()
{
string connectionString = GetConnectionString();
//定义数据库连接对象
SqlConnection connection = new SqlConnection(connectionString);
//定义SQL字符串
String MySQL = "Select * From T_STUDENT;";
//定义数据适配器对象
SqlDataAdapter MyAdapter = new SqlDataAdapter(MySQL, connection);
{
try
{
//打开数据库连接
connection.Open();
//定义MyAdapter对象的UpdateCommand属性使用的Update语句,这里仅按照指定的T_S_ID(学号)字段来更新表T_STUDENT的相应记录的T_S_NAME字段的值
MyAdapter.UpdateCommand = new SqlCommand("UPDATE T_STUDENT SET T_S_NAME = @StudentName " +
"WHERE T_S_AGE = @StudentAge", connection);
//定义UpdateCommand属性使用的参数名称、类型、长度、使用的表的字段名称,需要和表中的定义吻合起来
MyAdapter.UpdateCommand.Parameters.Add("@StudentName", SqlDbType.NVarChar, 6, "T_S_NAME");
//定义一个参数对象,并给其赋值
SqlParameter parameter = MyAdapter.UpdateCommand.Parameters.Add("@StudentAge", SqlDbType.Int);
parameter.SourceColumn = "T_S_AGE";
parameter.SourceVersion = DataRowVersion.Original;
parameter.SqlValue=29;
//定义数据集对象
DataSet MyDataSet = new DataSet();
//用表T_STUDENT的内容填充数据集对象
MyAdapter.Fill(MyDataSet, "T_STUDENT");
//定义数据行对象
DataRow MyRow = MyDataSet.Tables["T_STUDENT"].Rows[0];
//读者可以在这里更改字段的取值,然后可以发现数据库中的数据会被更改
MyRow["T_S_NAME"] = "王小军";
MyAdapter.Update(MyDataSet, "T_STUDENT");
Console.WriteLine("成功更新表中的数据");
}
catch (SqlException ex)
{
Console.WriteLine(ex.ToString());
Console.ReadLine();
}
finally
{
connection.Close();
Console.ReadLine();
Console.WriteLine("成功关闭到SQL Server 2005数据库的连接"); }
}
}
//返回连接字符串的函数
static private string GetConnectionString()
{
return "Integrated Security=Yes;Initial Catalog=DB_STUDENT;Server=ff89df21189f40f"; }
}
}
//引用系统命名空间
using System;
using System.Data;
using System.Data.SqlClient;
//项目生成的命名空间
namespace ConsoleApplication2
{
//项目中的类
class Program
{
//项目执行入口
static void Main()
{
string connectionString = GetConnectionString();
//定义数据库连接对象
SqlConnection connection = new SqlConnection(connectionString);
//定义SQL字符串
String MySQL = "Select * From T_STUDENT;";
//定义数据适配器对象
SqlDataAdapter MyAdapter = new SqlDataAdapter(MySQL, connection);
{
try
{
//打开数据库连接
connection.Open();
//定义MyAdapter对象的UpdateCommand属性使用的Update语句,这里仅按照指定的T_S_ID(学号)字段来更新表T_STUDENT的相应记录的T_S_NAME字段的值
MyAdapter.UpdateCommand = new SqlCommand("UPDATE T_STUDENT SET T_S_NAME = @StudentName " +
"WHERE T_S_AGE = @StudentAge", connection);
//定义UpdateCommand属性使用的参数名称、类型、长度、使用的表的字段名称,需要和表中的定义吻合起来
MyAdapter.UpdateCommand.Parameters.Add("@StudentName", SqlDbType.NVarChar, 6, "T_S_NAME");
//定义一个参数对象,并给其赋值
SqlParameter parameter = MyAdapter.UpdateCommand.Parameters.Add("@StudentAge", SqlDbType.Int);
parameter.SourceColumn = "T_S_AGE";
parameter.SourceVersion = DataRowVersion.Original;
parameter.SqlValue=29;
//定义数据集对象
DataSet MyDataSet = new DataSet();
//用表T_STUDENT的内容填充数据集对象
MyAdapter.Fill(MyDataSet, "T_STUDENT");
//定义数据行对象
DataRow MyRow = MyDataSet.Tables["T_STUDENT"].Rows[0];
//读者可以在这里更改字段的取值,然后可以发现数据库中的数据会被更改
MyRow["T_S_NAME"] = "王小军";
MyAdapter.Update(MyDataSet, "T_STUDENT");
Console.WriteLine("成功更新表中的数据");
}
catch (SqlException ex)
{
Console.WriteLine(ex.ToString());
Console.ReadLine();
}
finally
{
connection.Close();
Console.ReadLine();
Console.WriteLine("成功关闭到SQL Server 2005数据库的连接"); }
}
}
//返回连接字符串的函数
static private string GetConnectionString()
{
return "Integrated Security=Yes;Initial Catalog=DB_STUDENT;Server=ff89df21189f40f"; }
}
}
DataRow MyRow = MyDataSet.Tables["T_STUDENT"].Rows[0]; // 是这里指定的修改第 1 行
using System;
using System.Data;
using System.Data.SqlClient;
//项目生成的命名空间
namespace ConsoleApplication2
{
//项目中的类
class Program
{
//项目执行入口
static void Main()
{
string connectionString = GetConnectionString();
//定义数据库连接对象
SqlConnection connection = new SqlConnection(connectionString);
//定义SQL字符串
String MySQL = "Select * From T_STUDENT;";
//定义数据适配器对象
SqlDataAdapter MyAdapter = new SqlDataAdapter(MySQL, connection);
{
try
{
//打开数据库连接
connection.Open();
//定义MyAdapter对象的UpdateCommand属性使用的Update语句,这里仅按照指定的T_S_ID(学号)字段来更新表T_STUDENT的相应记录的T_S_NAME字段的值
MyAdapter.UpdateCommand = new SqlCommand("UPDATE T_STUDENT SET T_S_NAME = @StudentName " +
"WHERE T_S_AGE = @StudentAge", connection);
//定义UpdateCommand属性使用的参数名称、类型、长度、使用的表的字段名称,需要和表中的定义吻合起来
MyAdapter.UpdateCommand.Parameters.Add("@StudentName", SqlDbType.NVarChar, 6, "T_S_NAME");
//定义一个参数对象,并给其赋值
SqlParameter parameter = MyAdapter.UpdateCommand.Parameters.Add("@StudentAge", SqlDbType.Int);
parameter.SourceColumn = "T_S_AGE";
parameter.SourceVersion = DataRowVersion.Original;
parameter.SqlValue=29;
//定义数据集对象
DataSet MyDataSet = new DataSet();
//用表T_STUDENT的内容填充数据集对象
MyAdapter.Fill(MyDataSet, "T_STUDENT");
//定义数据行对象
DataRow MyRow = MyDataSet.Tables["T_STUDENT"].Rows[0];
//读者可以在这里更改字段的取值,然后可以发现数据库中的数据会被更改
MyRow["T_S_NAME"] = "王小军";
MyDataSet.Tables["T_STUDENT"].Rows[0]["T_S_NAME"]="王小军";
MyAdapter.Update(MyDataSet, "T_STUDENT");
Console.WriteLine("成功更新表中的数据");
}
catch (SqlException ex)
{
Console.WriteLine(ex.ToString());
Console.ReadLine();
}
finally
{
connection.Close();
Console.ReadLine();
Console.WriteLine("成功关闭到SQL Server 2005数据库的连接"); }
}
}
//返回连接字符串的函数
static private string GetConnectionString()
{
return "Integrated Security=Yes;Initial Catalog=DB_STUDENT;Server=ff89df21189f40f"; }
}
}