数据库函数是数据库中用于封装特定逻辑的可复用单元,分为系统内置函数和自定义函数两类,内置函数如SUM、COUNT等用于聚合计算,自定义函数可由开发者根据业务需求编写,能减少重复代码,提升数据处理的规范性和效率。

数据库函数的基本分类
数据库函数按照返回结果的不同,主要分为两类:
- 标量函数:返回单个值,比如根据员工ID计算员工工龄、根据商品ID获取商品单价等,调用后只会得到一个确定的结果。
- 表值函数:返回一个表结构的结果集,比如根据部门ID查询该部门所有员工信息、根据时间范围查询订单列表等,调用结果可以像普通表一样进行查询操作。
C#调用数据库函数的准备工作
在C#中调用数据库函数,通常使用ADO.NET组件,首先需要引入相关命名空间:
using System.Data; using System.Data.SqlClient; // 如果是SQL Server数据库,引入该命名空间,其他数据库对应引入对应驱动命名空间
同时需要准备好数据库的连接字符串,示例如下:
string connectionString = "Server=127.0.0.1;Database=TestDB;User Id=sa;Password=123456;";
C#调用标量函数的方法
标量函数的调用方式和普通SQL查询类似,通过SqlCommand执行SQL语句即可获取返回结果。假设数据库中有一个自定义标量函数dbo.GetUserAge,接收用户ID参数,返回用户年龄,调用示例如下:
public int CallScalarFunction(int userId)
{
int userAge = 0;
string sql = "SELECT dbo.GetUserAge(@UserId)"; // 标量函数调用语法,函数名前加架构名
using (SqlConnection conn = new SqlConnection(connectionString))
{
SqlCommand cmd = new SqlCommand(sql, conn);
// 添加参数,避免SQL注入
cmd.Parameters.Add(new SqlParameter("@UserId", SqlDbType.Int) { Value = userId });
conn.Open();
// 执行查询获取单个值
object result = cmd.ExecuteScalar();
if (result != null && result != DBNull.Value)
{
userAge = Convert.ToInt32(result);
}
}
return userAge;
}
C#调用表值函数的方法
表值函数的调用结果是一个结果集,可以通过SqlDataReader读取数据,或者填充到DataTable中。假设数据库中有一个表值函数dbo.GetUsersByDept,接收部门ID参数,返回该部门所有用户的信息,调用示例如下:
public DataTable CallTableValuedFunction(int deptId)
{
DataTable userTable = new DataTable();
string sql = "SELECT * FROM dbo.GetUsersByDept(@DeptId)"; // 表值函数可以像普通表一样放在FROM子句中
using (SqlConnection conn = new SqlConnection(connectionString))
{
SqlCommand cmd = new SqlCommand(sql, conn);
cmd.Parameters.Add(new SqlParameter("@DeptId", SqlDbType.Int) { Value = deptId });
conn.Open();
SqlDataAdapter adapter = new SqlDataAdapter(cmd);
adapter.Fill(userTable); // 将结果填充到DataTable
}
return userTable;
}
调用注意事项
- 调用函数时需要正确指定函数的架构名,默认是
dbo,如果自定义了其他架构需要对应修改。 - 所有传入的参数都建议使用参数化查询,避免拼接SQL字符串导致SQL注入风险。
- 如果使用其他类型数据库,比如MySQL、PostgreSQL,只需要替换对应的数据库连接组件和连接字符串格式,调用逻辑基本一致。
- 调用前需要确认数据库函数已经正确创建,并且当前数据库用户有调用该函数的权限。
数据库函数C#ADO.NETSQL_Server存储过程修改时间:2026-07-15 14:00:30