- =============================================
-- Author: <allen>
-- Create date: <2007-11-12>
-- Description: <确认员工单据时间是否有重叠>
-- =============================================
CREATE PROCEDURE [dbo].[p_CheckBillEmpTimeRepeat]
(
@ObjectName varchar(50),
@ObjectID int,
@EmployeeUVID varchar(20) ,
@BeginDate varchar(20),
@EndDate varchar(20),
@BeginTime varchar(10),
@EndTime varchar(10),
@Count int output
)
AS
begin tran
declare @BeginDateTime smalldatetime ,@EndDateTime smalldatetime ,@IsRepeat bit
set @BeginDateTime=Cast((@BeginDate+' '+@BeginTime)as smalldatetime)
set @EndDateTime=Cast((@EndDate+' '+@EndTime)as smalldatetime)
set @IsRepeat=0
if @ObjectName='Leave'
begin
select @Count=count(1) from tleave where ID<>@ObjectID and EmpUVID=@EmployeeUVID and
(
(cast((Convert(varchar(10),BeginDate,120)+' '+BeginTime) as smalldatetime)>=@BeginDateTime
and cast((Convert(varchar(10),BeginDate,120)+' '+BeginTime) as smalldatetime)<@EndDateTime)
or
(cast((Convert(varchar(10),EndDate,120)+' '+EndTime) as smalldatetime)>@BeginDateTime
and cast((Convert(varchar(10),EndDate,120)+' '+EndTime) as smalldatetime)<=@EndDateTime)
or
(cast((Convert(varchar(10),EndDate,120)+' '+EndTime) as smalldatetime)<@BeginDateTime
and cast((Convert(varchar(10),EndDate,120)+' '+EndTime) as smalldatetime)>@EndDateTime)
)
end
else if @ObjectName='Egress'
begin
select @Count=count(1) from tEgressEmployee where PKID<>@ObjectID and EmployeeUVID=@EmployeeUVID and
(
(cast((Convert(varchar(10),BeginDate,120)+' '+BeginTime) as smalldatetime)>=@BeginDateTime
and cast((Convert(varchar(10),BeginDate,120)+' '+BeginTime) as smalldatetime)<@EndDateTime)
or
(cast((Convert(varchar(10),EndDate,120)+' '+EndTime) as smalldatetime)>@BeginDateTime
and cast((Convert(varchar(10),EndDate,120)+' '+EndTime) as smalldatetime)<=@EndDateTime)
or
(cast((Convert(varchar(10),EndDate,120)+' '+EndTime) as smalldatetime)<@BeginDateTime
and cast((Convert(varchar(10),EndDate,120)+' '+EndTime) as smalldatetime)>@EndDateTime)
)
end
commit tran
GO
public static void RunProcedure(string storedProcName, IDataParameter[] parameters)
{
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
SqlCommand command = BuildQueryCommand(connection, storedProcName, parameters);
command.CommandType = CommandType.StoredProcedure;
command.ExecuteNonQuery();
connection.Close();
}
}
/// <summary>
/// 执行存储过程
/// </summary>
/// <param name="storedProcName">存储过程名</param>
/// <param name="parameters">存储过程参数</param>
/// <param name="tableName">DataSet结果中的表名</param>
/// <returns>DataSet</returns>
public static DataSet RunProcedure(string storedProcName, IDataParameter[] parameters, string tableName)
{
using (SqlConnection connection = new SqlConnection(connectionString))
{
DataSet dataSet = new DataSet();
connection.Open();
SqlDataAdapter sqlDA = new SqlDataAdapter();
sqlDA.SelectCommand = BuildQueryCommand(connection, storedProcName, parameters);
sqlDA.Fill(dataSet, tableName);
connection.Close();
return dataSet;
}
}
public DataSet GetList(int PageSize, int PageIndex, string strWhere)
{
SqlParameter[] parameters = {
new SqlParameter("@tblName", SqlDbType.VarChar, 255),
new SqlParameter("@fldName", SqlDbType.VarChar, 255),
new SqlParameter("@PageSize", SqlDbType.Int),
new SqlParameter("@PageIndex", SqlDbType.Int),
new SqlParameter("@IsReCount", SqlDbType.Bit),
new SqlParameter("@OrderType", SqlDbType.Bit),
new SqlParameter("@strWhere", SqlDbType.VarChar,1000),
};
parameters[0].Value = "vwProject";
parameters[1].Value = "CreateTime";
//parameters[0].Value = "f_GetProject()";
//parameters[1].Value = "CreateTime";
parameters[2].Value = PageSize;
parameters[3].Value = PageIndex;
parameters[4].Value = 0;
parameters[5].Value = 0;
parameters[6].Value = strWhere;
//return DbHelperSQL.RunProcedure("p_GetAssetsByPage", parameters, "ds");
return DbHelperSQL.RunProcedure("p_GetRecordByPage", parameters, "ds");
}
/// <summary>
/// 构建 SqlCommand 对象(用来返回一个结果集,而不是一个整数值)
/// </summary>
/// <param name="connection">数据库连接</param>
/// <param name="storedProcName">存储过程名</param>
/// <param name="parameters">存储过程参数</param>
/// <returns>SqlCommand</returns>
private static SqlCommand BuildQueryCommand(SqlConnection connection, string storedProcName, IDataParameter[] parameters)
{
SqlCommand command = new SqlCommand(storedProcName, connection);
command.CommandType = CommandType.StoredProcedure;
foreach (SqlParameter parameter in parameters)
{
if (parameter != null)
{
// 检查未分配值的输出参数,将其分配以DBNull.Value.
if ((parameter.Direction == ParameterDirection.InputOutput || parameter.Direction == ParameterDirection.Input) &&
(parameter.Value == null))
{
parameter.Value = DBNull.Value;
}
command.Parameters.Add(parameter);
}
}
return command;
}
c#&sql server
需积分: 0 19 浏览量
更新于2008-11-13
收藏 850KB RAR 举报
在IT领域,C#与SQL Server的结合是常见的开发模式,尤其在企业级应用程序中,它们扮演着核心角色。本文将深入探讨如何在C#中连接到SQL Server数据库,并调用存储过程,以及相关的知识点。
C#是微软推出的面向对象的编程语言,它在.NET框架下运行,广泛用于Windows桌面应用、Web应用和服务端开发。SQL Server是微软的一款关系型数据库管理系统(RDBMS),提供强大的数据存储和处理能力。
要连接C#和SQL Server,我们需要使用ADO.NET,这是.NET框架的一部分,提供了与数据库交互的接口。在C#代码中,我们通常会创建一个`SqlConnection`对象,然后使用`ConnectionString`属性设置数据库连接字符串。连接字符串包括服务器名称、数据库名、用户名和密码等信息。例如:
```csharp
using System.Data.SqlClient;
string connectionString = "Data Source=myServerAddress;Initial Catalog=myDataBase;User Id=myUsername;Password=myPassword;";
SqlConnection connection = new SqlConnection(connectionString);
```
接下来,为了执行存储过程,我们需打开连接,创建一个`SqlCommand`对象,设置其`CommandText`属性为存储过程的名称,并将其`Connection`属性设置为之前创建的`SqlConnection`。如果存储过程需要输入参数,我们可以使用`AddWithValue()`方法添加参数。例如:
```csharp
connection.Open();
SqlCommand command = new SqlCommand("usp_MyProcedure", connection);
command.CommandType = CommandType.StoredProcedure;
command.Parameters.AddWithValue("@param1", value1);
command.Parameters.AddWithValue("@param2", value2);
```
然后,通过调用`ExecuteNonQuery()`(无结果返回)、`ExecuteReader()`(返回数据集)或`ExecuteScalar()`(返回单个值)来执行存储过程。执行完成后,记得关闭连接以释放资源:
```csharp
int result = command.ExecuteNonQuery(); // 如果是无结果操作
SqlDataReader reader = command.ExecuteReader(); // 如果需要读取多行数据
object singleValue = command.ExecuteScalar(); // 如果只返回一个值
connection.Close();
```
在处理返回结果时,`SqlDataReader`可以遍历每一行数据,`ExecuteScalar`则返回单个值,通常用于查询总数或者某个特定值。`ExecuteNonQuery`常用于更新、插入和删除操作,它会返回受影响的行数。
在实际应用中,考虑到异常处理和代码的可维护性,我们通常将数据库操作封装在自定义的类或方法中。此外,还可以使用`using`语句块自动处理连接的关闭和释放,以防止资源泄露:
```csharp
using (SqlConnection connection = new SqlConnection(connectionString))
{
// ... 上述代码 ...
}
```
以上就是C#连接SQL Server并调用存储过程的基本步骤和关键知识点。通过熟练掌握这些内容,开发者能够构建出高效、稳定的数据库应用系统。在实际项目中,还需要考虑安全性、性能优化、事务管理等多个方面,以确保系统的稳定性和可靠性。
tengxiaoming
- 粉丝: 25
- 资源: 35
最新资源
- 白色大气风格的西餐披萨美食网站模板下载.zip
- 白色大气风格的西餐烧烤甜品网站模板下载.zip
- 白色大气风格的西餐厅bootstrap企业网站模板.zip
- 白色大气风格的西餐厅网店模板下载.zip
- 白色大气风格的响应式CSS3模板下载.zip
- 白色大气风格的鲜花网站html5模板下载.zip
- 白色大气风格的响应式灯饰装修网站模板.zip
- 白色大气风格的响应式仿ios模板下载.zip
- 白色大气风格的响应式房产网站模板.zip
- 白色大气风格的项目投资介绍网站模板下载.zip
- 白色大气风格的响应式服饰家具商城网站模板下载.zip
- 白色大气风格的响应式旅游度假HTML模板.zip
- 白色大气风格的写字楼房产网站模板下载.zip
- 白色大气风格的雪山旅游景区CSS3网站模板.zip
- 白色大气风格的星级酒店整站网站源码下载.zip
- 白色大气风格的燕麦种植网站模板下载.zip