C# 模棱两可的列名?

C# 模棱两可的列名?,c#,asp.net,sql-server,C#,Asp.net,Sql Server,好吧,那么。。我真的找不到问题,所以我在这里发帖。另外,我是MSSQL新手,所以请温柔一点 我得到了模棱两可的列名 我有两张表:心脏病学和心脏病学。我想从两者中选择一些列,并在gridview中显示它们作为结果。我提出了一个问题。。事实就是这样: string str = @" SELECT Cardiology.CID, Cardiology.Name, Cardiology.Designation, Cardiology.Qualification,

好吧,那么。。我真的找不到问题,所以我在这里发帖。另外,我是MSSQL新手,所以请温柔一点

我得到了模棱两可的列名

我有两张表:心脏病学和心脏病学。我想从两者中选择一些列,并在gridview中显示它们作为结果。我提出了一个问题。。事实就是这样:

string str = @"
SELECT Cardiology.CID,
       Cardiology.Name,
       Cardiology.Designation,
       Cardiology.Qualification,
       Cardiology.Shift,
       Cardiology.Appointment_Timings,
       Cardio_schedule.Ward_rounds,
       Cardio_schedule.Slot1,
       Cardio_schedule.Slot2,
       Cardio_schedule.Slot3,
       Cardio_schedule.Slot4,
       Cardio_schedule.BreakTime,
       Cardio_schedule.Slot5,
       Cardio_schedule.Slot6,
       Cardio_schedule.Slot7,
       Cardio_schedule.Slot8
FROM   Cardiology
       CROSS JOIN Cardio_schedule
WHERE  Cardiology.Name = Cardio_schedule.Name
       AND Name = '" + TextBox1.Text + "'";
            cmd = new SqlCommand(str, con);
            con.Open();
            SqlDataAdapter adp = new SqlDataAdapter(cmd);
            DataTable dt = new DataTable();
            adp.Fill(dt);
            GridView1.DataSource = dt;
            GridView1.DataBind();
            con.Close();
我知道问题是什么。 我确实尝试了ON,但它在“ON”附近说了不正确的语法。任何形式的帮助都将不胜感激。 谢谢

你在最后错过了

选择Cardiology.CID, 心脏病, 心脏病.名称, 心脏病学,资格, 心脏病,轮班, 心脏病,预约时间, 有氧运动时间表,病房查房, 有氧运动计划表1, 有氧运动计划表2, 有氧运动计划表3, 有氧运动计划表4, 有氧运动时间表,休息时间, 有氧运动计划表5, 有氧运动计划表6, 有氧运动计划表7, 有氧运动计划表8 从心脏病学 交叉连接有氧运动计划 其中Cardiology.NAME=Cardio_schedule.NAME AND Cardiology.NAME='as'-'Cardiology'别名缺失
您的问题在过滤器中:-

AND Name = '" + TextBox1.Text + "'";
            cmd = new SqlCommand(str, con);
根据要引用的表更改它:-

AND Cardiology.Name = '" + TextBox1.Text + "'";
            cmd = new SqlCommand(str, con);
请注意,您的查询是为打开的,因此您应该使用参数化查询,如下所示:-

string str = "Cardiology.CID,Cardiology.Name, .....WHERE  
              Cardiology.Name = Cardio_schedule.Name
              AND Cardiology.Name = @Name";
cmd = new SqlCommand(str, con);
cmd.Parameters.Add("@Name",DbType.NVarChar,20).Value = TextBox1.Text;
.....and so on

请注意,我认为您的数据类型为NVARCHA20,您需要相应地进行更改。

在查询结束时,应该有:

WHERE Cardiology.Name = Cardio_schedule.Name AND Cardio_schedule.Name = '"


仅写入Name属性使其不明确。

添加一个TableName。限定符toName in和Name='就像在选择列表中一样。您应该对此进行参数化,在TextBox1.Text中添加一个',然后查看运行查询时会发生什么,也可以使用内部联接。。。在上而不是交叉连接。。。哪里同样的语义,但更容易理解。如果你真的想害怕,在你的文本框中输入“-”,看看会发生什么。非常感谢@AlexK。你能不能把它作为一个正确的答案,这样我就可以选择它作为答案?再次感谢!非常感谢拉胡尔·辛格!谢谢,我知道了。谢谢你的帮助!谢谢,我知道了。谢谢你的帮助!
WHERE Cardiology.Name = Cardio_schedule.Name AND Cardiology.Name = '"