c存储过程datatable
❶ C#中如何判断 DataTable 内是否有数据
对DataTable数据各种筛选
筛选一个DataTable的数据,赋值给另外一个DataTable
假设:
有2个DataTable:DataTable A、DataTable B。
要求:
筛选DataTable A中itemType字段值为book的数据,然后把筛选出来的数据,赋给DataTable B
实现:
(1)方法一:通过 RowFilter 筛选实现
DataView view = new DataView();
view.Table = A;
view.RowFilter = "itemType = 'book'";//itemType是A中的一个字段
B= view.ToTable();
(2)方法二:通过 Select()筛选
DataRow[] rows = A.Select("itemType = 'book'");
B= A.Clone(); //克隆A的结构
foreach (DataRow row in rows)
{
B.ImportRow(row);//复制行数据
}
注:如果有多个筛选条件的话,可以加 and 或 or。例如: A.Select("itemType = 'book' and a='b' or a='c'");
❷ 如何将datatable传入存储过程中
一、测试环境
1、Windows Server 2008 R2 DataCenter
2、Visual Studio 2008 Team System With SP1
3、sql Server 2008 Enterprise Edition With SP1
由于是SQL Server 2008新特性,所以只能用2008。
二、测试概述
测试项目很简单,就是添加新用户
三、准备数据
1、建立数据库、表、类型、存储过程
IF NOT EXISTS(SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID('Users') AND OBJECTPROPERTY(id, N'IsUserTable') = 1)
BEGIN
CREATE TABLE dbo.Users
(
UserID INT IDENTITY(-1, -1) NOT NULL,
UserName VARCHAR(20) NOT NULL,
UserPass VARCHAR(20) NOT NULL,
Sex BIT NULL,
Age SMALLINT NULL,
CONSTRAINT PK_Users_UserID PRIMARY KEY(UserID)
)
END
IF NOT EXISTS(SELECT * FROM sys.table_types WHERE name = 'UserTable' AND is_user_defined = 1)
BEGIN
CREATE TYPE UserTable AS TABLE
(
UserName VARCHAR(20) NOT NULL,
UserPass VARCHAR(20) NOT NULL,
Sex BIT NULL,
Age SMALLINT NULL
)
END
GO
IF EXISTS(SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID('sp_InsertSingleUser') AND OBJECTPROPERTY(id, N'IsProcere') = 1)
BEGIN
DROP PROCEDURE dbo.sp_InsertSingleUser
END
GO
CREATE PROCEDURE dbo.sp_InsertSingleUser
(
@User UserTable READONLY
)
AS
SET XACT_ABORT ON
BEGIN TRANSACTION
INSERT INTO dbo.Users(UserName, UserPass, Sex, Age)
SELECT UserName, UserPass, Sex, Age FROM @User
COMMIT TRANSACTION
SET XACT_ABORT OFF
GO
前台搭建好表单,后台主要是一个函数:
publicvoidfnInsertSingleUser(DataTablev_dt)
{
try
{
SqlConnectioncn=newSqlConnection(CONN);
SqlCommandcmd=cn.CreateCommand();
cmd.CommandType=CommandType.StoredProcere;
cmd.CommandText=@"sp_InsertSingleUser";
SqlParameterp=cmd.Parameters.AddWithValue("@User",v_dt);
DataSetds=newDataSet();
SqlDataAdapterda=newSqlDataAdapter(cmd);
da.Fill(ds);
}
catch(Exceptionex)
{
throwex;
}
}
❸ C#中一个存储过程返回两个结果集,如下图,该如何用Datagridview调用
执行存储过程调用的是ADO.net
返回的结果集是一个DataSet对象。
如果不是,请检查下你的数据连接库,改下代码。
如果存储过程返回的是两个结果集,那么返回的DataSet就有两个DataTable对象。
调用的时候
只需要
DataSet
ds=dbHelper.RunProcere("Web_pGetDataPager");//假设的返回dataset对象的执行存储过程的方法。
ds.Tables[0]
就是第一个结果集
ds.Tables[1]
就是第二个结果集
//弱绑定第二个结果集
就是下面这样
Datagridview.DataSource=ds.Table[1];
Datagridview.DataBind();
❹ C#中如何使用DataSet和DataTable接收从数据库传过来的值 详细代码 谢谢 (初学者)
/// <summary>
/// SQL Server 的数据库连接字符串.
/// </summary>
private const String connString =
@"Data Source=localhost\SQLEXPRESS;Initial Catalog=Test;Integrated Security=True";
/// <summary>
/// 用于查询的 SQL 语句.
/// </summary>
private const String SQL =
@"
SELECT
TOP 3
ROW_NUMBER() OVER (ORDER BY SUM(SALE_MONEY) DESC) AS NO,
SALE_DATE,
SUM(SALE_MONEY) AS SUM_MONEY
FROM
SALE_REPORT
GROUP BY
SALE_DATE
ORDER BY
SUM(SALE_MONEY) DESC";
/// <summary>
/// 将数据读取到 DataSet 中.
///
/// 这里演示了2种方式,一种是从数据库中读取,一种是从XML文件中读取.
/// </summary>
public void ReadDataToDataSet()
{
Console.WriteLine("使用DataAdapter,将数据填充到DataSet中,然后脱离数据库,直接对DataSet进行处理。");
// 建立数据库连接.
SqlConnection conn = new SqlConnection(connString);
// 创建一个适配器
SqlDataAdapter adapter = new SqlDataAdapter(SQL, conn);
// 创建DataSet,用于存储数据.
DataSet testDataSet = new DataSet();
// 执行查询,并将数据导入DataSet.
adapter.Fill(testDataSet, "result_data");
// 关闭数据库连接.
conn.Close();
// 处理DataSet中的每一行数据.
foreach (DataRow testRow in testDataSet.Tables["result_data"].Rows)
{
// 将检索出来的数据,输出到屏幕上.
Console.WriteLine("NO:{0} ; Date:{1} ; Money:{2} ",
testRow["NO"], testRow["SALE_DATE"], testRow["SUM_MONEY"]
);
}
// 注意:
// 在通过 DataTable 的 WriteXml 方法来导出数据,给其他系统使用的时候
// 还需要使用 WriteXmlSchema 来导出 Schema
// 否则在使用 ReadXml 读取的时候, 会发生错误,因为新的 DataTable 不知道表的结构,不知道该如何去读取.
// 除非你手动设置好每个列的字段/数据类型等信息,那么 DataSet 或者 DataTable 将能够理解如何倒入,而不在需要 ReadXmlSchema
Console.WriteLine("将 DataTable 的数据,写入到 XML 文件中。");
testDataSet.Tables["result_data"].WriteXmlSchema(DATATABLE_SCHEMA_XML_FILE);
testDataSet.Tables["result_data"].WriteXml(DATATABLE_XML_FILE);
Console.WriteLine("从 XML 文件中,读取数据到 DataTable 里面。");
DataTable newDt = new DataTable();
newDt.ReadXmlSchema(DATATABLE_SCHEMA_XML_FILE);
newDt.ReadXml(DATATABLE_XML_FILE);
// 处理DataSet中的每一行数据.
foreach (DataRow testRow in newDt.Rows)
{
// 将检索出来的数据,输出到屏幕上.
Console.WriteLine("NO:{0} ; Date:{1} ; Money:{2} ",
testRow["NO"], testRow["SALE_DATE"], testRow["SUM_MONEY"]
);
}
}
❺ C# 存储过程 如何返回 tatatable
Database db = DALFactory.DatabaseCustomFoctory.CreateDatabase();
if (db != null)
{
string sqlCommand = "Web_DataV10_Area_SelectLayer";
DbCommand dbCommand = db.GetStoredProcCommand(sqlCommand);
db.AddInParameter(dbCommand, "OperatorID", DbType.Int32, EmpID);
db.AddInParameter(dbCommand, "AreaID", DbType.String, "");
ds = db.ExecuteDataSet(dbCommand);
现在都用工厂了,这种方法你可以体验一下,直接调用sql数据库中的存贮过程,返回dataset,得到datatable,不用SqlDataAdapter,可以吗
❻ c#调用存储过程,实现向数据库表中添加数据
//使用SqlDataAdapter调用存储过程(主要应用于查询)
private void Form1_Load(object sender, EventArgs e)//窗口加载事件
{
SqlConnection conn = null;//声明SqlConnection,用于连接数据库
try
{
conn = new SqlConnection("server=.;database=要连接的数据库名;uid=登陆数据库的账号;pwd=登录数据库的密码");
SqlDataAdapter sda = new SqlDataAdapter("proc_SelectAllStuInfo",conn);//声明SqlDataAdapter适配器,括号里的第一个参数是要掉的存储过程的名字,第二个参数是连接数据库的Conn。
DataSet ds = new DataSet();//new一个DataSet数据集(临时仓库)
sda.Fill(ds);//把适配器里的结果填充到DataSet里
DataTable dt = ds.Tables[0];//创建一个DataTable获取DataSet里的数据
this.dgvStuInfo.DataSource = dt;//把DataTable中的数据绑定到DataGridView中
}
//抓异常
catch (Exception ex)
{
MessageBox.Show(ex.Message);
return;
}
finally
{
conn.Close();//最后关闭数据库连接
}
}
❼ 利用C#语言,调用存储过程,使用三层架构实现,我需要实现的功能见问题补充
先写Dal层
public datatable GetTable()
{
SqlConnection conn=new SqlConnection ();
conn.ConnectionString="Server=(local);database=db;uid=sa;pwd=sa";//连接数据源
conn.Open();
SqlCommand cmd=new SqlCommand("Select",conn);//其中select为存储过程名称
cmd.CommandType = CommandType.StoredProcere;//指定执行类型为存储过程
DataTable dt = new DataTable();
//执行存储过程
SqlDataAdapter sda=new SqlDataAdapter(cmd);
//将结果填充到datatable中
sda.Fill(dt);
return dt;//返回Datatable
}
Bll层
//实例化Dal层方法
DAL dal=new DAL();
public datatable BllGetTable()
{// 获取数据表
return dal.GetTable();
}
页面层
//实例化Bll层方法
Bll bll=new Bll();
Datatable dt=new datatable();
// 调用Bll层方法
dt=bll.BllGetTable();
❽ C#如何获取datatable指定行的值
/定义表
DataTable dt = new DataTable();
//填充表
//获得行
DataRow dr1 = dt.Rows.Find("Key");
DataRow dr2 = dt.Rows[0];
//获得列数据
string colString1 = dr1[1].ToString();
string colString2 = dr1["ColumnName"].ToString();
❾ C#如何接收存储过程的返回结果集
请看下面加粗代码 public static string[] GetUserInformation() //获得用户详细信息 { DataSet ds = new DataSet(); SqlDataAdapter adapter = new SqlDataAdapter(); string[] InForMation = new string[3]; using (SqlConnection conn = new SqlConnection(getTools.ConnString)) { conn.Open(); using (SqlCommand cmd = new SqlCommand("prou_iflogin", conn)) { cmd.CommandType = CommandType.StoredProcere; cmd.Parameters.Add("@userid", SqlDbType.VarChar); cmd.Parameters["@userid"].Value = user.Userid; cmd.ExecuteNonQuery(); adapter.SelectCommand = cmd; if (ds != null) { adapter.Fill(ds, "userinfo"); } //这里怎么把ds的数据读取出来放到数组里面呢? //下面的就是放到数组里的代码 DataTable dt = ds.Table[0]; string[] strmds = new string[dt.Rows.Count]; string[] strtime = new string[dt.Rows.Count]; string[] username = new string[dt.Rows.Count]; for(int i=0;i<dt.Rows.Count;i++) { strmds[i] = dt.Rows[i][0].ToString(); strtime[i] = dt.Rows[i][1].ToString(); username[i] = dt.Rows[i][2].ToString(); } } return InForMation; } }
❿ c#中的DataTable如何修改数据类型
很简单。修改下值就可以。
我想LZ要学会自己思考。我想这个你都没有思考一看不会就发上来了。我给你写下如何生成DataTable的步骤。然后自己思考,修改下。
最简单的方式
DataTable dt=new DataTable("Table1"); //创建数据表
DataColumn dcID=new DataColumn("ID",typeof(int)); //创建ID列
DataColumn dcName=new DataColumn("Name",typeof(string));//创建姓名列
DataColumn dcState=new DataColumn("State",typeof(int));//创建状态列
//把创建的三列放在DataTable中
dt.Columns.Add(dcID); dt.Columns.Add(dcName);
dt.Columns.Add(dcState);
//创建数据行。
DataRow dr=dt.NewRow();
dr["ID"]=1; dr["Name"]=A; dr["State"]=1;
//把创建的行插入到数据表“Table1”中
dt.Rows.Add(dr);
//如上,这样就创建了一个如题所示的数据表的过程。
如果你想把bit型转换为char型。只需要候改下插入的列即可。
如将状态列改为:
DataColumn dcState=new DataColumn("State",typeof(char)); //此处将其改为Char类型。
//如上所示数据行
DataRow dr=dt.NewRow();
dr["ID"]=1; dr["Name"]=A; dr["State"]="是"; //把State列的值改为"是"或“否”即可。
打了半天,只希望楼主能从中体会如何自定义DataTable。
GoodLuck!!