它说明了一个名为CarId的名字

时间:2016-11-29 12:54:59

标签: c#

string carid = Request.QueryString["carde"];
            var conString = ConfigurationManager.ConnectionStrings["CONSTRING"].ConnectionString;
            SqlConnection con = new SqlConnection(conString);
            con.Open();
            SqlCommand cmd1 = new SqlCommand("SELECT cars.*, img.img FROM cars INNER JOIN img ON cars.carid = img.carid where cars.carid= "+carid+"", con);
            SqlDataAdapter sda1 = new SqlDataAdapter(cmd1);
            DataTable dt = new DataTable();
            sda1.Fill(dt);
            cardetail.DataSource = dt;
            cardetail.DataBind();

我无法发现此查询有任何问题。 有人可以帮忙吗?提前谢谢。

3 个答案:

答案 0 :(得分:0)

您的内部联接有一个包含另一个carid列名称的表。

如果您想要更加可靠的评估,请包含表格模式。

答案 1 :(得分:0)

我不确定暧昧carid,但你应该使用如下参数。试试这个,我们会看到其余的。

SqlCommand cmd1 = new SqlCommand(
    "SELECT cars.*, img.img" +
    "FROM cars, img" +
    "WHERE cars.carid = img.carid AND cars.carid = @carid", con);

cmd1.Parameters.AddWithValue("@carid", carid);

答案 2 :(得分:0)

您的通配符*必须是此处的问题。

SELECT cars.*, img.img FROM cars INNER JOIN...

不是通过通配符从cars中选择所有内容,而是手动选择它们(这在编码时更好)。在编码时使用SELECT *是一种不好的做法!

SELECT cars.col1, cars.col2, cars.carid, cars.., img.img FROM cars INNER JOIN...  

修改

这肯定是我能想到的唯一可能性。但是,您提供了正在使用的数据库系统。我只是在mssql上尝试过,无法重现它。

懒得创建测试表,所以我选择了一些伪表

SELECT a.*, b.a FROM (SELECT 1 a, 2 b, 3 ab UNION SELECT 2, 2, 2) a
LEFT JOIN
(SELECT 1 a, 2 b, 3ab UNION SELECT 2, 2, 2) b
ON a.a = b.a

即使a.* ab具有相同的列,也不会出现错误。