Heim > Backend-Entwicklung > C++ > Wie übergeben Sie Array -Parameter an einen SQLCommand in C#?

Wie übergeben Sie Array -Parameter an einen SQLCommand in C#?

Patricia Arquette
Freigeben: 2025-01-26 17:41:14
Original
573 Leute haben es durchsucht

How to Pass Array Parameters to a SqlCommand in C#?

Übergabe von Array-Parametern an SqlCommand in C#

In C# kann es beim Versuch, Array-Parameter an einen SQL-Befehl zu übergeben, zu einem Problem kommen, das nicht wie erwartet funktioniert. Die Hauptursache liegt darin, dass Arrays nicht direkt als Parameter zu SqlCommand hinzugefügt werden können. Um dieses Problem zu lösen, muss jeder Wert im Array einzeln hinzugefügt werden.

Lösung:

  1. Array-Parameter definieren:

    Erstellen Sie ein Array von Parametern mit den erforderlichen Namen und Datentypen.

  2. Parameter zu SqlCommand hinzufügen:

    Fügen Sie für jeden Wert im Array ein neues SqlParameter-Objekt hinzu und geben Sie den entsprechenden Namen und Wert an. Legen Sie bei Bedarf den entsprechenden SqlDbType und die entsprechende Größe fest.

  3. IN-Klausel ersetzen:

    Ersetzen Sie den Platzhalter „{parameterNameRoot}“ in CommandText durch eine durch Kommas getrennte Liste von Parameternamen.

Beispiel:

<code class="language-csharp">var parameters = new string[items.Length]; // 此处items应替换为实际的数组变量
var cmd = new SqlCommand();
for (int i = 0; i < items.Length; i++)
{
    cmd.Parameters.AddWithValue("@param" + i, items[i]);
}
cmd.CommandText = cmd.CommandText.Replace("{param}", string.Join(",", Enumerable.Range(0, items.Length).Select(i => "@param" + i)));</code>
Nach dem Login kopieren

Verbesserte Lösung:

Eine verbesserte, wiederverwendbare Lösung kann als Erweiterungsmethode implementiert werden:

<code class="language-csharp">public static class SqlCommandExt
{
    public static SqlParameter[] AddArrayParameters<T>(this SqlCommand cmd, string paramNameRoot, IEnumerable<T> values, SqlDbType? dbType = null, int? size = null)
    {
        var parameters = new List<SqlParameter>();
        var parameterNames = new List<string>();
        var paramNbr = 1;

        foreach (var value in values)
        {
            var paramName = string.Format("@{0}{1}", paramNameRoot, paramNbr++);
            parameterNames.Add(paramName);
            var p = new SqlParameter(paramName, value);
            if (dbType.HasValue)
                p.SqlDbType = dbType.Value;
            if (size.HasValue)
                p.Size = size.Value;

            cmd.Parameters.Add(p);
            parameters.Add(p);
        }

        cmd.CommandText = cmd.CommandText.Replace("{" + paramNameRoot + "}", string.Join(",", parameterNames));

        return parameters.ToArray();
    }
}</code>
Nach dem Login kopieren

Verwendung:

<code class="language-csharp">var cmd = new SqlCommand("SELECT * FROM TableA WHERE Age IN ({Age})");
cmd.AddArrayParameters("Age", new int[] { 1, 2, 3 });</code>
Nach dem Login kopieren

Dieses verbesserte Beispiel verwendet Generika, was es flexibler macht und die Angabe von SqlDbType und Size ermöglicht. Außerdem wird das potenzielle Sicherheitsrisiko vermieden, das durch das direkte Zusammenfügen von Parameternamen in CommandText entsteht. Denken Sie daran, bei der tatsächlichen Verwendung TableA und Age durch Ihre tatsächlichen Tabellen- und Spaltennamen zu ersetzen.

Das obige ist der detaillierte Inhalt vonWie übergeben Sie Array -Parameter an einen SQLCommand in C#?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage