你好我在visual studio 2010中构建一个web服务。我得到一些id,它们保存在一个字符串中,如下所示:
string room_ids="5,11,99,42";
它们用逗号分隔。我创建了一个foreach
循环来分割id和逗号,并在我的SQL查询中使用它们,直到id完成。但它不起作用。我得到一个错误:
Error converting data type nvarchar to numeric
这是我的代码,提前感谢您的帮助!
internal static List<RAUM> Raum(string RAUMKLASSE_ID, string STADT_ID, string GEBAEUDE_ID, string REGION_ID)
{
List<RAUM> strasseObject = new List<RAUM>();
string[] allegebaude = GEBAEUDE_ID.Split(new char[] { ',' });
foreach (string gebaudeid in allegebaude)
{
Trace.WriteLine("SIND JETZT DRINNE");
Trace.WriteLine(gebaudeid);
using (SqlConnection con = new SqlConnection(@"Data Source=Localhost\SQLEXPRESS;Initial Catalog=BOOK-IT-V2;Integrated Security=true;"))
using (SqlCommand cmd = new SqlCommand(@"SELECT r.BEZEICHNUNG AS BEZEICHNUNG, r.ID AS ID FROM RAUM r WHERE RAUMKLASSE_ID = ISNULL(@Raumklasse_ID, RAUMKLASSE_ID) AND STADT_ID = ISNULL(@Stadt_ID, STADT_ID) AND GEBAEUDE_ID = ISNULL(@gebaudeid,GEBAEUDE_ID ) AND REGION_ID = ISNULL(@Region_ID, REGION_ID)", con))
{
con.Open();
if (!StringExtensions.IsNullOrWhiteSpace(RAUMKLASSE_ID))
cmd.Parameters.AddWithValue("@Raumklasse_ID", RAUMKLASSE_ID);
else
cmd.Parameters.AddWithValue("@Raumklasse_ID", DBNull.Value);
if (!StringExtensions.IsNullOrWhiteSpace(STADT_ID))
cmd.Parameters.AddWithValue("@Stadt_ID", STADT_ID);
else
cmd.Parameters.AddWithValue("@Stadt_ID", DBNull.Value);
if (!StringExtensions.IsNullOrWhiteSpace(GEBAEUDE_ID))
cmd.Parameters.AddWithValue("@gebaudeid", GEBAEUDE_ID);
else
cmd.Parameters.AddWithValue("@gebaudeid", DBNull.Value);
if (!StringExtensions.IsNullOrWhiteSpace(REGION_ID))
cmd.Parameters.AddWithValue("@Region_ID", REGION_ID);
else
cmd.Parameters.AddWithValue("@Region_ID", DBNull.Value);
using (SqlDataReader rdr = cmd.ExecuteReader())
{
while (rdr.Read())
{
if (rdr["BEZEICHNUNG"] != DBNull.Value && rdr["ID"] != DBNull.Value)
{
strasseObject.Add(new RAUM()
{
RaumName = rdr["BEZEICHNUNG"].ToString(),
RaumID = rdr["ID"].ToString()
});
}
}
}
}
}
return strasseObject;
}
答案 0 :(得分:2)
如果您已经在逗号分隔的字符串中使用了ID(称为IDstring
),那么您可以执行以下操作:
sqlQuery = "SELECT Columns FROM table WHERE ID IN (" + IDstring + ")";
在您的特定情况下,请不要拆分原始字符串(GEBAEUDE_ID),而是按原样使用它:
// Don't use a foreach loop any more
string gebaudeIdSection = " AND GEBAEUDE_ID IN (" + GEBAEUDE_ID + ") ";
if (string.IsNullOrEmpty(GEBAUDE_ID)) { gebaudeIdSection = ""; } // if there are no ids, let's remove that part of the query completely.
using (SqlConnection con = new SqlConnection(@"Data Source=Localhost\SQLEXPRESS;Initial Catalog=BOOK-IT-V2;Integrated Security=true;"))
using (SqlCommand cmd = new SqlCommand(@"SELECT r.BEZEICHNUNG AS BEZEICHNUNG, r.ID AS ID FROM RAUM r WHERE RAUMKLASSE_ID = ISNULL(@Raumklasse_ID, RAUMKLASSE_ID) AND STADT_ID = ISNULL(@Stadt_ID, STADT_ID)" + gebaudeIdSection + " AND REGION_ID = ISNULL(@Region_ID, REGION_ID)", con))
{ // The rest of the code is the same as before...
答案 1 :(得分:1)
试试这个:
if (!StringExtensions.IsNullOrWhiteSpace(gebaudeid))
cmd.Parameters.AddWithValue("@gebaudeid", Convert.ToInt32(gebaudeid));
您还应该将正确的参数传递给AddWithValue语句。您正在遍历您的ID列表,该列表为allegebaude
。因此,您必须将gebaudeid
参数传递给您的语句,而不是现在正在执行的操作。
答案 2 :(得分:1)
首先,我认为你必须纠正:
cmd.Parameters.AddWithValue("@gebaudeid", GEBAEUDE_ID);
使用:
cmd.Parameters.AddWithValue("@gebaudeid", gebaudeid);
然后,尝试将id转换为整数(例如,使用Convert.ToInt32(gebaudeid)
),而不是在AddWithValue
方法中将它们作为字符串传递。
答案 3 :(得分:0)
您无法隐式处理以逗号分隔的值列表;相反,你需要创建一个表值函数来将值列表拆分成表结构,然后像往常一样使用这个结构。
看看这个问题:INSERT INTO TABLE from comma separated varchar-list是否有示例函数。