You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Visual Studio 2022中用C#查询已连接的SQL Server数据库

无需Entity Framework,在Blazor Server中直接查询SQL Server数据库

1. 确认连接字符串已配置

通过「连接服务」添加数据库后,项目的appsettings.json中应该已自动生成对应连接字符串,格式大致如下:

{
  "ConnectionStrings": {
    "YourDatabaseConnection": "Server=你的服务器地址;Database=数据库名;User ID=用户名;Password=密码;TrustServerCertificate=True;"
  }
}

直接使用该连接字符串名称即可获取数据库连接配置。

2. 创建数据访问服务

新建数据访问类(如DatabaseService.cs),用SqlConnection和SqlCommand执行存在性查询,必须用参数化查询防止SQL注入:

using Microsoft.Extensions.Configuration;
using System.Data.SqlClient;

public class DatabaseService
{
    private readonly string _connectionString;

    // 构造函数注入配置,读取连接字符串
    public DatabaseService(IConfiguration configuration)
    {
        _connectionString = configuration.GetConnectionString("YourDatabaseConnection") 
            ?? throw new InvalidOperationException("未找到数据库连接字符串");
    }

    // 检查指定名称是否存在于目标表中
    public async Task<bool> IsNameExistsAsync(string tableName, string name)
    {
        // 参数化查询,规避注入风险
        string sql = $"SELECT 1 FROM {tableName} WHERE Name = @Name";
        
        using (var connection = new SqlConnection(_connectionString))
        {
            await connection.OpenAsync();
            
            using (var command = new SqlCommand(sql, connection))
            {
                command.Parameters.AddWithValue("@Name", name);
                
                // 执行查询,返回非空结果则说明名称存在
                var result = await command.ExecuteScalarAsync();
                return result != null;
            }
        }
    }
}

注意:若表名/字段名不是Name,需自行调整SQL语句;若表名是动态传入,建议增加白名单校验,避免恶意表名注入。

3. 注册服务到依赖注入容器

在Program.cs中注册数据访问服务(Blazor Server推荐使用Scoped生命周期):

builder.Services.AddScoped<DatabaseService>();

4. 在Blazor组件中调用服务

在需要查询的.razor组件中注入服务并执行查询:

@page "/check-name"
@inject DatabaseService DbService
@using System.Threading.Tasks

<h3>检查名称是否存在</h3>

<input @bind="targetName" placeholder="输入名称" />
<button @onclick="CheckName">查询</button>

@if (result.HasValue)
{
    <p>名称@(result.Value ? "存在" : "不存在")</p>
}

@code {
    private string targetName = string.Empty;
    private bool? result;

    private async Task CheckName()
    {
        // 替换为你实际要查询的表名,比如"Products"
        result = await DbService.IsNameExistsAsync("Users", targetName);
    }
}

补充说明

  • 若项目未安装System.Data.SqlClient,可通过NuGet包管理器安装:Install-Package System.Data.SqlClient
  • Blazor Server中所有数据库操作需使用异步方法(带Async后缀),避免阻塞主线程影响UI响应

内容的提问来源于stack exchange,提问作者RGreen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 09:55:21