首页 > 解决方案 > System.Data.SqlClient.SqlException:'C# 中的'附近语法不正确

问题描述

我在代码中找不到错误,但它显示给我。

System.Data.SqlClient.SqlException:'附近的语法不正确')

我的代码在这里:

private void ShowChart()
{
    string UserID = "";

    for (int Counter = 0; Counter < UID.Count - 1; Counter++)
    {
        UserID += UID[Counter].ToString() + ",";
    }

    UserID = UserID.Substring(0, UserID.Length);

    string[] ListFamily = { };
    int[] ListTime = { };

    var Query = Database.Database.SqlQuery<Vw_ShowChartInfo>("Select * From Vw_ShowChartInfo Where UserID In (" + UserID + ")").ToList();

    for (int I = 0; I < Query.Count; I++)
    {
        Family.Add(Query[I].FullName.ToString());
        Time.Add(Convert.ToInt32(Query[I].TotalTime));
        ListFamily = Family.ToArray();
        ListTime = Time.ToArray();
    }

    this.Chart.Series.Clear();
    this.Chart.Palette = System.Windows.Forms.DataVisualization.Charting.ChartColorPalette.Pastel;
    this.Chart.Titles.Add("نمودار کارکرد پرسنل");

    for (int II = 0; II < ListFamily.Length; II++)
    {
        Series series = this.Chart.Series.Add(ListFamily[II] + "-" + Query[II].TotalTime);
        series.Points.Add(ListTime[II]);
    }
}

C#中的错误

标签: c#sql-server

解决方案


我认为你的问题可能是这一行:

UserID = UserID.Substring(0, UserID.Length);

您正在生成的字符串末尾包含一个逗号。看起来您正试图用该行修剪逗号,但您只是再次选择相同的字符串。改用这个:

UserID = UserID.Substring(0, UserID.Length - 1);

此外,假设您的用户 ID 是数字。否则,您需要用单引号将它们括起来。

话虽如此,以这种方式连接字符串是一个糟糕的主意,因为它会使您容易受到 SQL 注入攻击。考虑一种不同的方法。


推荐阅读