Как получить доступ к элементам словаря?
Я разрабатываю приложение веб-сайта C# VS2008 / SQL Server и новичок в классе Dictionary. Не могли бы вы посоветовать наилучший способ достижения этой цели? Вот фрагмент кода:
SqlConnection conn2 = new SqlConnection(connString);
SqlCommand cmd = conn2.CreateCommand();
cmd.CommandText = "dbo.AppendDataCT";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Connection = conn2;
SqlParameter p1, p2, p3;
foreach (string s in dt.Rows[1].ItemArray)
{
DataRow dr = dt.Rows[1]; // second row
p1 = cmd.Parameters.AddWithValue((string)dic[0], (string)dr[0]);
p1.SqlDbType = SqlDbType.VarChar;
p2 = cmd.Parameters.AddWithValue((string)dic[1], (string)dr[1]);
p2.SqlDbType = SqlDbType.VarChar;
p3 = cmd.Parameters.AddWithValue((string)dic[2], (string)dr[2]);
p3.SqlDbType = SqlDbType.VarChar;
}
но это дает мне ошибку компилятора:
The best overloaded method match for 'System.Collections.Generic.Dictionary<string,string>.this[string]' has some invalid arguments
Я просто хочу получить доступ к каждому значению из " dic " и загрузить в эти параметры SQL. Как мне это сделать? Должен ли я ввести ключ? Ключи называются "от col1", "столбец col2" и т. д. так не самый удобный. Еще какие-нибудь советы? Спасибо!
6 ответов
вы, кажется, пытаетесь получить доступ к Dictionary<string, string>
by целое. Вы не можете этого сделать - вы должны искать значение по ключу, который является строкой.
если вы не хотите использовать строковые ключи, почему вы используете Dictionary<string, string>
начать? Не могли бы вы использовать List<string>
или Dictionary<int, string>
?
обратите внимание, что после есть удалось использовать индексатор соответствующим образом, вам не нужно будет бросать в строку.
A Dictionary
отображает объекты одного типа в объекты другого типа. В вашем случае у вас есть Dictionary<string, string>
. Поэтому, если вы инициализировали его следующим образом:
Dictionary<string, string> dic = new Dictionary<string, string>()
{
{ "key1", "value1" },
{ "key2", "value2" },
{ "key3", "value3" }
};
вы получите значение для key2
делать
dic["key2"]; // gives "value2"
на Dictionary
строго типизирован, поэтому нет необходимости в каком-либо литье. Как говорит Джон Скит, вам может быть лучше с List<string>
здесь. Вы можете получить доступ к ним по целочисленному индексу.
вот фрагмент кода, который сделает то, что вам нужно, я думаю.. Вам нужно будет добавить оператор else, но он должен заставить вас начать.
public void AttachParam(ref DbCommand command, Dictionary<string, string> parameters)
{
try
{
if (parameters.Count > 0)
{
foreach (KeyValuePair<string, string> kvp in parameters)
{
command.Parameters.AddWithValue(kvp.Key, kvp.Value);
}
}
}
catch (Exception ex)
{
throw;
}
}
Если ваши ключи "col1", "col2" и т. д., то использование 0, 1 и т. д. вызовет ошибку, которую вы получаете. Попробуйте это:
p1 = cmd.Parameters.AddWithValue(dic["col1"], dr[0]);
p1.SqlDbType = SqlDbType.VarChar;
p2 = cmd.Parameters.AddWithValue(dic["col2"], dr[1]);
p2.SqlDbType = SqlDbType.VarChar;
p3 = cmd.Parameters.AddWithValue(dic["col3"], dr[2]);
p3.SqlDbType = SqlDbType.VarChar;
кроме того, нет необходимости бросать в string
поскольку объект dictionary уже возвращает строки.
Я не могу понять, что на самом деле вы ищете, так вот мой маленький совет. Существует способ просмотра словаря, не запрашивая элементы по ключу. Это вариант foreach.
foreach (KeyValuePair<string,string> pair in dic)
{
p. = cmd.Parameters.AddWithValue(dic.Value /*or dic.Key*/, (string)dr[0]);
p.SqlDbType = SqlDbType.VarChar;
// further processing of this parameter
}