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

C#向SQL Server的Players表插入数据失败,求技术解决方案

解决SQL Server插入Players表的错误问题

错误原因分析

你遇到的SqlException核心问题有三点:

  • 带空格的列名(比如First Name)未加包裹,SQL Server会将其解析为两个独立标识符,导致"无效列名"错误
  • 插入语句中指定的列/值数量和Players表的实际结构不匹配
  • 大概率是直接拼接字符串生成SQL语句,既引发语法错误,又存在SQL注入风险

修复步骤

1. 修正列名格式

对包含空格的列名,必须用方括号[]包裹,比如[First Name]、[Last Name],让SQL Server识别为单个列。

2. 匹配表结构

先确认Players表的字段定义,可执行以下SQL查询查看表结构:

SELECT COLUMN_NAME, DATA_TYPE FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'Players';

确保插入语句中的列名、数量、顺序和表结构完全对应。

3. 使用参数化查询替代字符串拼接

这是解决语法错误和避免SQL注入的关键,通过SqlParameter传递参数,而非直接拼接变量到SQL语句中。

修正后的代码示例

假设Players表包含[First Name]、[Last Name]、PlayerId、Score字段,修正DataManager的插入方法如下:

public class DataManager
{
    private string _connectionString = "你的数据库连接字符串";

    public bool InsertPlayer(string firstName, string lastName, int playerId, int score)
    {
        using (SqlConnection conn = new SqlConnection(_connectionString))
        {
            // 明确指定列名,带空格的列用方括号包裹
            string sql = @"INSERT INTO Players ([First Name], [Last Name], PlayerId, Score)
                           VALUES (@FirstName, @LastName, @PlayerId, @Score)";

            using (SqlCommand cmd = new SqlCommand(sql, conn))
            {
                // 添加参数,与SQL中的@占位符对应
                cmd.Parameters.AddWithValue("@FirstName", firstName);
                cmd.Parameters.AddWithValue("@LastName", lastName);
                cmd.Parameters.AddWithValue("@PlayerId", playerId);
                cmd.Parameters.AddWithValue("@Score", score);

                try
                {
                    conn.Open();
                    int rowsAffected = cmd.ExecuteNonQuery();
                    return rowsAffected > 0;
                }
                catch (SqlException ex)
                {
                    // 可添加日志记录便于排查
                    Console.WriteLine($"插入失败:{ex.Message}");
                    return false;
                }
            }
        }
    }
}

额外注意事项

  • 禁止直接将用户输入拼接进SQL语句,参数化查询是标准做法
  • 确保数据库连接字符串对应的账号拥有Players表的INSERT权限
  • 测试时可先在SSMS中手动执行插入语句,验证语法和数据的正确性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 06:16:05