Ich habe den folgenden Code bekam einen Datatable mit einer gespeicherten Prozedur zurück zu ziehen und einen String-Parametern @JobNumbers Eingabe, die dynamisch Reihe von Auftragsnummern erstellt wird (und damit Länge ist nicht bekannt):Wie erstellt NVarchar (max) Sqlparameter in C#?
using (SqlConnection connection = new SqlConnection(con))
{
SqlCommand cmd = new SqlCommand("dbo.Mystoredprocedure", connection);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@JobNumbers", SqlDbType.VarChar, 4000);
cmd.Parameters["@JobNumbers"].Value = JobNumber;
SqlDataAdapter da = new SqlDataAdapter(cmd);
connection.Open();
da.Fill(JobDetails);
}
Wie Sie können sehen, dass ich den JobNumber-Parameter derzeit auf eine Länge von 4000 eingestellt habe, was ausreichen sollte, um etwa 500 Job-Nummern zu übernehmen und sollte ausreichen. Es besteht jedoch die Möglichkeit, dass es bei ungewöhnlichen Gelegenheiten mehr benötigt. Also, ich frage mich, gibt es eine Möglichkeit, den Parameter auf den entsprechenden SQL-Parameter Typ von Nvarchar (max) zu setzen?
Ich habe mir verschiedene ähnliche Fragen angeschaut (What's the best method to pass parameters to SQLCommand?), aber keiner sagt genau, ob Sie das können (oder können). Zweitens, ist es sogar notwendig, dies zu tun, wenn ich den Parameter @JobNumber in der Stored Procedure auf nvarchar (max) setze und daher vermutlich nicht die Länge in C# überhaupt setzen müsste? Wenn ich dies tue, hat dies potenzielle Leistungsprobleme, wie in dieser Frage When should "SqlDbType" and "size" be used when adding SqlCommand Parameters? vorgeschlagen?
hier Werfen Sie einen Blick : http://stackoverflow.com/questions/973260/what-size-do-you-use-for-varcharmax-in-your-parameter-declaration – Eugene
Es wäre besser, einen Datentyp zu verwenden, der natürlich das Speichern mehrerer separater Daten unterstützt Elemente, anstatt diese Zeichenfolge. Die beiden Typen, die diese Unterstützung unterstützen, sind Tabellen selbst (in Form von separaten Zeilen für jedes Element) oder XML. –