哥们门问个dataset 和dataread的问题
哥们门两个问题
第一个:我做dataread的时候用完了需要read.close
请问如果要用dataset的话需要断开连接什么的么?或者关闭什么的么?
第二个问题:
我用dataread的时候就string username=read[ "username "].tostring()
我看过别人写的dt.table[ "** "][数字][数字]
这样来获取,我感觉挺麻烦的
请问dataset中能不能像dataread那样直接写字段名的方法呢 谢谢
两个问题 每个50分 一共100分呵呵谢谢大家帮忙
[解决办法]
一样的啊 也要关闭连接
[解决办法]
using System;
using System.Data;
using System.Data.SqlClient;
namespace Microsoft.AdoNet.DataSetDemo
{
class NorthwindDataSet
{
static void Main()
{
string connectionString = GetConnectionString();
ConnectToData(connectionString);
}
private static void ConnectToData(string connectionString)
{
//Create a SqlConnection to the Northwind database.
using (SqlConnection connection =
new SqlConnection(connectionString))
{
//Create a SqlDataAdapter for the Suppliers table.
SqlDataAdapter adapter = new SqlDataAdapter();
// A table mapping names the DataTable.
adapter.TableMappings.Add( "Table ", "Suppliers ");
// Open the connection.
connection.Open();
Console.WriteLine( "The SqlConnection is open. ");
// Create a SqlCommand to retrieve Suppliers data.
SqlCommand command = new SqlCommand(
"SELECT SupplierID, CompanyName FROM dbo.Suppliers; ",
connection);
command.CommandType = CommandType.Text;
// Set the SqlDataAdapter 's SelectCommand.
adapter.SelectCommand = command;
// Fill the DataSet.
DataSet dataSet = new DataSet( "Suppliers ");
adapter.Fill(dataSet);
// Create a second Adapter and Command to get
// the Products table, a child table of Suppliers.
SqlDataAdapter productsAdapter = new SqlDataAdapter();
productsAdapter.TableMappings.Add( "Table ", "Products ");
SqlCommand productsCommand = new SqlCommand(
"SELECT ProductID, SupplierID FROM dbo.Products; ",
connection);
productsAdapter.SelectCommand = productsCommand;
// Fill the DataSet.
productsAdapter.Fill(dataSet);
// Close the connection.
connection.Close();
Console.WriteLine( "The SqlConnection is closed. ");
// Create a DataRelation to link the two tables
// based on the SupplierID.
DataColumn parentColumn =
dataSet.Tables[ "Suppliers "].Columns[ "SupplierID "];
DataColumn childColumn =
dataSet.Tables[ "Products "].Columns[ "SupplierID "];
DataRelation relation =
new System.Data.DataRelation( "SuppliersProducts ",
parentColumn, childColumn);
dataSet.Relations.Add(relation);
Console.WriteLine(
"The {0} DataRelation has been created. ",
relation.RelationName);
}
}
static private string GetConnectionString()
{
// To avoid storing the connection string in your code,
// you can retrieve it from a configuration file.
return "Data Source=(local);Initial Catalog=Northwind; "
+ "Integrated Security=SSPI ";
}
}
}
[解决办法]
你连接到数据库,查询到相关的信息吗,返回一个结果集,之后就应该断开连接
[解决办法]
介意你多看下msdn
[解决办法]
1. DataReader 的定义是 "只进数据流 " ,意思是说,每个DataReader会占用一个通道,即数据连接. 所以每次用完后都需要关闭.
DataSet 是内存对象, 它的工作原理是,从数据库中取出数据保存到内存中, 取完后自动断开连接. 不需要Close
2. DataSet是中可以保存多张表, "数据库的一个副本,包含多张数据表 " ,可以这样理解.
DataSet可以像DataReader那样使用. 列名默认为数据库字段名.
[解决办法]
1、DataSet是local的,与connnection没有关系。
DataAdapter不用显示打开和关闭Connection,如果的在你使用之前,没有打开连接,DataAdapter会自动帮你打开连接,而且在使用完毕会自动关闭连接,如果在你使用之前已经打开连接,DataAdapter会使用这个连接,但使用完毕不会关闭连接,需要你自己显式关闭连接的
2、可以,先填充到一个命名的DataTable里,然后调用
SqlDataAdapter custAdapter = new SqlDataAdapter( "SELECT * FROM school ", con);
DataSet ds= new DataSet();
myAdapter.Fill(ds, "student ");
DataTable student = ds.Tables[ "student "];
string student_name = student[0][ "STUDENT_NAME "].ToString();
以上代码只是举个例子,没有测试,可以查看一下MSDN相关内容
[解决办法]
第一个:我做dataread的时候用完了需要read.close
请问如果要用dataset的话需要断开连接什么的么?或者关闭什么的么?
===============================================================
DataRead是独占数据库连接的,所以当你对数据操作完后需要调用其Close()方法,再关闭连接
DataSet是应用程序使用DataAdapter的Fill方法把数据库中的数据填充到了内存中(如果是B/S结构,则是Web服务器的内存中,如果是C/S结构,则是本机),而调用DataAdapter的Fill方法时会隐式地打开连接,但不会隐式地关闭连接,所以我们最好能手动打开关闭连接,数据填充到内存后和数据库已经关系了,所以没有DataSet的什么关闭方法
第二个问题:
我用dataread的时候就string username=read[ "username "].tostring()
我看过别人写的dt.table[ "** "][数字][数字]
这样来获取,我感觉挺麻烦的
请问dataset中能不能像dataread那样直接写字段名的方法呢 谢谢
==============================================================
可以,如果是强类型的数据集的话,甚至可以把数据库字段当做属性来使用
[解决办法]
DataSet 这个的 概念 要认真看看.msdn
[解决办法]
第一个:我做dataread的时候用完了需要read.close
********************
dataread是在线一条一条的向后读取,在读取完数据以前必须保持与数据库的链接。读完以后不仅需要read.close,还要关闭数据库链接。
dataset是读到内存中的,从数据库一次性读取数据到dataset的,dataset没有这样的关闭方法:dataset.close。但是读完数据以后你记得马上关闭数据库链接。
第二个问题:请问dataset中能不能像dataread那样直接写字段名的方法呢
***********************
字段名、数字都行的