【问题标题】:Inner join using ado.net is not working properly使用 ado.net 的内部连接无法正常工作
【发布时间】:2016-01-16 10:32:10
【问题描述】:

使用 Ado.net 的内部连接无法正常工作。请查看随附的代码并告诉我。我在“值”中成功接收字符串数组值。我认为我的代码本身存在一些问题。

public JsonResult searchdata(String[] values,String[] values1,String[] values2)
        {
            //String str;
            //for (int i = 0; i <= values.Length; i++)
            //{
            //    str = values[i];
            //    Console.WriteLine(str);
            //}

            using (SqlConnection connection = new SqlConnection("data source=.; database=Srivatsava; integrated security=SSPI"))
            {
                DataSet ds = new DataSet();
                connection.Open();
                SqlCommand cmd = connection.CreateCommand();
                String str= "select accntname,BU,salesop,isdormant from fourth_page as fg"+
                                  " INNER JOIN linked as ld on ld.productid=fg.productid"+
                                   "INNER JOIN isdormant as it on it.productid=ld.productid"+
                                   "where fg.accountname in" + values;
                cmd.CommandText = str;
                SqlDataAdapter mySqlDataAdapter = new SqlDataAdapter();
                mySqlDataAdapter.SelectCommand = cmd;
                mySqlDataAdapter.Fill(ds);
                foreach (DataRow dr in ds.Tables[0].Rows)
                {
                    Console.WriteLine(dr[0].ToString() + "" + dr[1].ToString() + "" + Convert.ToInt32(dr[2]) + "" + Convert.ToBoolean(dr[3]));
                }               

                connection.Close();
            }
            return Json(values);

        }

【问题讨论】:

  • 什么不起作用,你期望什么结果,你得到什么
  • 控制在调试时没有进入循环。我在 ajax 调用中收到 500 错误。
  • 这意味着你抛出了一个异常。调试你的代码。
  • 一个问题,我的内连接查询是否正确?
  • 我怎么可能知道您的表结构,但"where fg.accountname in" + values; 可能是个问题(但同样,您希望任何人猜出values 的值是多少)。并用正在发生的事情的细节编辑你的问题。只需注释掉代码以确认是否存在问题。

标签: asp.net-mvc asp.net-mvc-4 ado.net asp.net-ajax


【解决方案1】:

values 是一个数组,您不能将它注入到查询中。您需要从数组中读取每个项目并在 in 子句中使用它。下面的代码应该可以正常工作。

我还用 SqlDataReader 替换了 SqlDataAdapter 来查询数据。

public JsonResult searchdata(String[] values)
{
    var result = new List<string>();
    using (var con = new SqlConnection("Put your conn string here"))
    {
        using (var cmd = new SqlCommand())
        {
           var str= "select accntname,BU,salesop,isdormant from fourth_page as fg"+
                            " INNER JOIN linked as ld on ld.productid=fg.productid"+
                            " INNER JOIN isdormant as it on it.productid=ld.productid ";


            if (values != null && values.Any())
            {
             var items = values.Select((x, counter) => "@v" + counter);
             str +=string.Format(" where fg.accountname in ({0})", 
                                                             string.Join(",", items));

                var paramCounter = 0;
                foreach (var value in values)
                {
                    cmd.Parameters.AddWithValue("@v" + paramCounter, value);
                    paramCounter++;
                }
            }
            cmd.CommandText = str;
            cmd.Connection = con;
            con.Open();
            var reader = cmd.ExecuteReader();
            if (reader.HasRows)
            {
                while (reader.Read())
                {
                    var c1 = reader.GetString(reader.GetOrdinal("accntname"));
                    result.Add(c1);
                }
            }                 
        }
    }
    return Json(result, JsonRequestBehavior.AllowGet);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-24
    • 2021-03-16
    • 1970-01-01
    • 2018-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多