VS2012的SQL语句中where 子句是不是跟VS2010不一样呀

时间:2022-01-26 23:06:59
在VS2010里面可以正常读取返回行数 在VS2012就不行
         }*/
            using (SqlConnection conn=new SqlConnection (Properties.Settings.Default.SchoolConnectionString))
            {
                SqlCommand cmd = new SqlCommand("MyProcedure", conn);

                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add("@User", SqlDbType.NVarChar).Value= textBox1.Text.Trim();
                cmd.Parameters.Add("@Pwd", SqlDbType.NChar).Value = textBox2.Text.Trim();
                try
                {
                    conn.Open();
                    int r = cmd.ExecuteNonQuery();
                    if (r>0)
                    {
                        MessageBox.Show("成功!");
                    }

                }
                catch
                { }
            }

        }

31 个解决方案

#1


在那一句出问题的? 抛异常了?

#2


引用 1 楼 derekrose 的回复:
在那一句出问题的? 抛异常了?


就是SQL语句有问题 呀  但是在V2010以前的编译器都可以 你可试试

#3


引用 1 楼 derekrose 的回复:
在那一句出问题的? 抛异常了?


这个最普通的用户登陆界面 都整了半天 后来我换到VS2010就可以   但不知道怎么修改

  string connectionString = Properties.Settings.Default.UserDatabaseConnectionString;
               
             SqlConnection conn = new SqlConnection(connectionString);
             string sql = string.Format("select User,Pwd from UserTable WHERE User='{0}'and Pwd='{1}'",textBox1.Text,textBox2.Text);
           
                SqlDataAdapter adapter = new SqlDataAdapter(sql, conn);
            DataTable table=new DataTable ();
            adapter.Fill(table);
            
                if (table.Rows.Count>0)
                {

                    MessageBox.Show("OK");
                }
                else
                {
                    MessageBox.Show("用户名不存在或密码错误!");
                }
                    

#4


检查下连接字符串,sql server的配置

去掉try catch,贴出丢出的异常的具体信息。

#5


where语句和visual studio的版本没有任何关系,断点调试,复制生成的sql语句到sql server中,执行看看结果

#6


设置断点。跟踪Sql,拷贝Sql到管理器里执行。

#7


引用 5 楼 luanjun123456 的回复:
where语句和visual studio的版本没有任何关系,断点调试,复制生成的sql语句到sql server中,执行看看结果


问题是我在另一个登陆界面里也遇到了 一样的问题 同样的SQL语句  VS2012就不可以 VS2010则可以
如下列这段代码  在VS2010 count 就有值  VS2012无论如何 都不对

             SqlConnection conn = new SqlConnection(connectionString);
             string sql = string.Format("select User,Pwd from UserTable WHERE User='{0}'and Pwd='{1}'",textBox1.Text,textBox2.Text);
             SqlDataAdapter adapter = new SqlDataAdapter(sql, conn);
             DataTable table=new DataTable ();
            adapter.Fill(table);
            
                if (table.Rows.Count>0)
                {

                    MessageBox.Show("OK");
                }
                else
                {
                    MessageBox.Show("用户名不存在或密码错误!");
                }

#8


引用 6 楼 smthgdin 的回复:
设置断点。跟踪Sql,拷贝Sql到管理器里执行。


在VS2012编译器里 只要后面有WHERE子句 几乎都不成功  放在VS2010即有影响的行数  
真是奇怪了 

#9


引用 4 楼 caozhy 的回复:
检查下连接字符串,sql server的配置

去掉try catch,贴出丢出的异常的具体信息。


SQL语句在VS2010里面没任何异常 可返回影响 行数   就是VS2012编译器里有问题  现在就是说 VS2012到底是不是改变了什么我们不知道的内容

#10


你这个代码是复制出来的?
and前少个空格吧 User='{0}'and Pwd= ,如果你代码里是这样,肯定有错了,你细查一下。
 

 string sql = string.Format("select User,Pwd from UserTable WHERE User='{0}'  and Pwd='{1}'",textBox1.Text,textBox2.Text);

#11


引用 10 楼 wind_cloud2011 的回复:
你这个代码是复制出来的?
and前少个空格吧 User='{0}'and Pwd= ,如果你代码里是这样,肯定有错了,你细查一下。
 

 string sql = string.Format("select User,Pwd from UserTable WHERE User='{0}'  and Pwd='{1}'",textBox1.Text,textBox2.Text);


有空格   我在另两台电脑用VS2010都有受影响行数  就是VS2012里遇到的问题     公司的电脑和自己的XP装的VS2010都OK
 
VS2012出现在问题 现在真是郁闷 就是不知道 VS2012到底改了什么东西

#12


你的sql语句中空格重新输一下,有时在别的输入法中空格字符有问题的,我遇到过,在代码里说有错误,放在sql数据库查询又正常。还有语句中先直接用数据,不要用参数,测试一下。看代码能不能通过。应该不会是VS2012的问题

#13


引用 12 楼 wind_cloud2011 的回复:
你的sql语句中空格重新输一下,有时在别的输入法中空格字符有问题的,我遇到过,在代码里说有错误,放在sql数据库查询又正常。还有语句中先直接用数据,不要用参数,测试一下。看代码能不能通过。应该不会是VS2012的问题


先谢谢你  不加where子句都能读取到表数据的  这个问题 困扰我N久  真的搞不懂

#14


where肯定不会有问题,我觉还是你语句中变量,字符等有问题,直接用数据测试一下,加一个数据条件测试,

#15


引用 14 楼 wind_cloud2011 的回复:
where肯定不会有问题,我觉还是你语句中变量,字符等有问题,直接用数据测试一下,加一个数据条件测试,


公司的电脑用的是VS2010 我自己的笔记本也是VS2010 是XP系统  

自己的台式机装的是VS2012遇到这问题 根据你给方法都检查试了 问题都试了 就是不见效果 狂晕 严重怀疑VS2012

#16


VS的版本与SQL有关联么? 不用怀疑VS 只需要找自己的问题就可以了。
别入参数直接写SQL执行, 一步步排除就是了。总之肯定是你的问题,不是VS的问题。

#17


SQL语句只与数据库有关,绝对不会因为编译器而不同。编译器只是把sql语句传给数据库而已,仅起到 传递作用。

很简单的解决办法:
在SQL语句构建完毕后的代码行, 设置断点,获取SQL语句的实例值,复制粘贴到数据库中执行。结果正确就说明程序没错;否则就是程序构建SQL出错。
没有其他情况。

#18


引用 17 楼 zhi_ai_yaya 的回复:
SQL语句只与数据库有关,绝对不会因为编译器而不同。编译器只是把sql语句传给数据库而已,仅起到 传递作用。

很简单的解决办法:
在SQL语句构建完毕后的代码行, 设置断点,获取SQL语句的实例值,复制粘贴到数据库中执行。结果正确就说明程序没错;否则就是程序构建SQL出错。
没有其他情况。



始终是NULL 实在是不知道这个SQL语句哪有问题  VS2010就正常

#19


引用 16 楼 xiaoqijun 的回复:
VS的版本与SQL有关联么? 不用怀疑VS 只需要找自己的问题就可以了。
别入参数直接写SQL执行, 一步步排除就是了。总之肯定是你的问题,不是VS的问题。


我试了 只要带where子句筛选 一定有问题   不知道大侠是不是也在用VS2012 可以一试 

#20


你能把你代码中有问题的where语句贴出来,看一下

#21


SQL语句是数据库的语法
数据库不同,SQL语句也会略有区别
但是跟VS版本是一点关系都没有的

#22


WHERE User='{0}'and
没加空格

#23


引用 21 楼 Z65443344 的回复:
SQL语句是数据库的语法
数据库不同,SQL语句也会略有区别
但是跟VS版本是一点关系都没有的


不是空格问题  现在就是不知道到底是区别在哪里  只要用WHERE子句筛选 均不行  

#24


应该与where语句无关的,如果SQL语句没有错误的话。真解决不了,那你还是用VS2010吧;

#25


你用碗和脸盆装米饭 但是你不能说你吃的米饭会因为脸盆变成肉丝,sql就是sql 怎么会随vs版本不同而不同呢

#26


引用 25 楼 rayyu1989 的回复:
你用碗和脸盆装米饭 但是你不能说你吃的米饭会因为脸盆变成肉丝,sql就是sql 怎么会随vs版本不同而不同呢


我意思就是SQL2012与VS2012是不是不协调  VS2012的SQL语句中where 子句是不是跟VS2010不一样呀
 算了 我还是用VS2010

#27


引用 26 楼 xph14798211847 的回复:
Quote: 引用 25 楼 rayyu1989 的回复:

你用碗和脸盆装米饭 但是你不能说你吃的米饭会因为脸盆变成肉丝,sql就是sql 怎么会随vs版本不同而不同呢


我意思就是SQL2012与VS2012是不是不协调  VS2012的SQL语句中where 子句是不是跟VS2010不一样呀
 算了 我还是用VS2010
肯定不存在这种问题

ExecuteNonQuery   执行存储过程.
[1].存储过程有返回值(传出参数)
    (1).把数据库中受影响的行数赋给返回值,这是得到的返回值是受影响的函数(大于或等于0的整数).
    (2).把某个值赋给返回值.
[2].存储过程没有返回值
    执行成功后返回 -1.
(没有返回值的存储过程理应 返回 受影响的行数 (执行 增删改) 但是.但我们在ado.net中执行存储过程的时候,dotnet 自动为给了存储过程一个默认值:set nocount on;
所以给我们的感觉是执行存储过程默认返回 -1  )

另外 你打印你vs2012读取出来的Properties.Settings.Default.SchoolConnectionString字符串看看和2010的一样,看看是否是哪里配置出现了问题

#28


catch
 { }
去掉你的try-catch,你就知道报什么错了,空catch是非常不推荐的,除非你确定那个异常可以不作处理

#29


把sql 打印出来 单独执行下看看

#30


WHERE User='{0}'and
WHERE User='{0}' and

仔细看到底啥区别,还说不是空格问题
饭吃噎着了,不要怪饭盆啊

#31


断点跟,把SQL语句复制出来,放客户端里执行,看到底怎么了

#1


在那一句出问题的? 抛异常了?

#2


引用 1 楼 derekrose 的回复:
在那一句出问题的? 抛异常了?


就是SQL语句有问题 呀  但是在V2010以前的编译器都可以 你可试试

#3


引用 1 楼 derekrose 的回复:
在那一句出问题的? 抛异常了?


这个最普通的用户登陆界面 都整了半天 后来我换到VS2010就可以   但不知道怎么修改

  string connectionString = Properties.Settings.Default.UserDatabaseConnectionString;
               
             SqlConnection conn = new SqlConnection(connectionString);
             string sql = string.Format("select User,Pwd from UserTable WHERE User='{0}'and Pwd='{1}'",textBox1.Text,textBox2.Text);
           
                SqlDataAdapter adapter = new SqlDataAdapter(sql, conn);
            DataTable table=new DataTable ();
            adapter.Fill(table);
            
                if (table.Rows.Count>0)
                {

                    MessageBox.Show("OK");
                }
                else
                {
                    MessageBox.Show("用户名不存在或密码错误!");
                }
                    

#4


检查下连接字符串,sql server的配置

去掉try catch,贴出丢出的异常的具体信息。

#5


where语句和visual studio的版本没有任何关系,断点调试,复制生成的sql语句到sql server中,执行看看结果

#6


设置断点。跟踪Sql,拷贝Sql到管理器里执行。

#7


引用 5 楼 luanjun123456 的回复:
where语句和visual studio的版本没有任何关系,断点调试,复制生成的sql语句到sql server中,执行看看结果


问题是我在另一个登陆界面里也遇到了 一样的问题 同样的SQL语句  VS2012就不可以 VS2010则可以
如下列这段代码  在VS2010 count 就有值  VS2012无论如何 都不对

             SqlConnection conn = new SqlConnection(connectionString);
             string sql = string.Format("select User,Pwd from UserTable WHERE User='{0}'and Pwd='{1}'",textBox1.Text,textBox2.Text);
             SqlDataAdapter adapter = new SqlDataAdapter(sql, conn);
             DataTable table=new DataTable ();
            adapter.Fill(table);
            
                if (table.Rows.Count>0)
                {

                    MessageBox.Show("OK");
                }
                else
                {
                    MessageBox.Show("用户名不存在或密码错误!");
                }

#8


引用 6 楼 smthgdin 的回复:
设置断点。跟踪Sql,拷贝Sql到管理器里执行。


在VS2012编译器里 只要后面有WHERE子句 几乎都不成功  放在VS2010即有影响的行数  
真是奇怪了 

#9


引用 4 楼 caozhy 的回复:
检查下连接字符串,sql server的配置

去掉try catch,贴出丢出的异常的具体信息。


SQL语句在VS2010里面没任何异常 可返回影响 行数   就是VS2012编译器里有问题  现在就是说 VS2012到底是不是改变了什么我们不知道的内容

#10


你这个代码是复制出来的?
and前少个空格吧 User='{0}'and Pwd= ,如果你代码里是这样,肯定有错了,你细查一下。
 

 string sql = string.Format("select User,Pwd from UserTable WHERE User='{0}'  and Pwd='{1}'",textBox1.Text,textBox2.Text);

#11


引用 10 楼 wind_cloud2011 的回复:
你这个代码是复制出来的?
and前少个空格吧 User='{0}'and Pwd= ,如果你代码里是这样,肯定有错了,你细查一下。
 

 string sql = string.Format("select User,Pwd from UserTable WHERE User='{0}'  and Pwd='{1}'",textBox1.Text,textBox2.Text);


有空格   我在另两台电脑用VS2010都有受影响行数  就是VS2012里遇到的问题     公司的电脑和自己的XP装的VS2010都OK
 
VS2012出现在问题 现在真是郁闷 就是不知道 VS2012到底改了什么东西

#12


你的sql语句中空格重新输一下,有时在别的输入法中空格字符有问题的,我遇到过,在代码里说有错误,放在sql数据库查询又正常。还有语句中先直接用数据,不要用参数,测试一下。看代码能不能通过。应该不会是VS2012的问题

#13


引用 12 楼 wind_cloud2011 的回复:
你的sql语句中空格重新输一下,有时在别的输入法中空格字符有问题的,我遇到过,在代码里说有错误,放在sql数据库查询又正常。还有语句中先直接用数据,不要用参数,测试一下。看代码能不能通过。应该不会是VS2012的问题


先谢谢你  不加where子句都能读取到表数据的  这个问题 困扰我N久  真的搞不懂

#14


where肯定不会有问题,我觉还是你语句中变量,字符等有问题,直接用数据测试一下,加一个数据条件测试,

#15


引用 14 楼 wind_cloud2011 的回复:
where肯定不会有问题,我觉还是你语句中变量,字符等有问题,直接用数据测试一下,加一个数据条件测试,


公司的电脑用的是VS2010 我自己的笔记本也是VS2010 是XP系统  

自己的台式机装的是VS2012遇到这问题 根据你给方法都检查试了 问题都试了 就是不见效果 狂晕 严重怀疑VS2012

#16


VS的版本与SQL有关联么? 不用怀疑VS 只需要找自己的问题就可以了。
别入参数直接写SQL执行, 一步步排除就是了。总之肯定是你的问题,不是VS的问题。

#17


SQL语句只与数据库有关,绝对不会因为编译器而不同。编译器只是把sql语句传给数据库而已,仅起到 传递作用。

很简单的解决办法:
在SQL语句构建完毕后的代码行, 设置断点,获取SQL语句的实例值,复制粘贴到数据库中执行。结果正确就说明程序没错;否则就是程序构建SQL出错。
没有其他情况。

#18


引用 17 楼 zhi_ai_yaya 的回复:
SQL语句只与数据库有关,绝对不会因为编译器而不同。编译器只是把sql语句传给数据库而已,仅起到 传递作用。

很简单的解决办法:
在SQL语句构建完毕后的代码行, 设置断点,获取SQL语句的实例值,复制粘贴到数据库中执行。结果正确就说明程序没错;否则就是程序构建SQL出错。
没有其他情况。



始终是NULL 实在是不知道这个SQL语句哪有问题  VS2010就正常

#19


引用 16 楼 xiaoqijun 的回复:
VS的版本与SQL有关联么? 不用怀疑VS 只需要找自己的问题就可以了。
别入参数直接写SQL执行, 一步步排除就是了。总之肯定是你的问题,不是VS的问题。


我试了 只要带where子句筛选 一定有问题   不知道大侠是不是也在用VS2012 可以一试 

#20


你能把你代码中有问题的where语句贴出来,看一下

#21


SQL语句是数据库的语法
数据库不同,SQL语句也会略有区别
但是跟VS版本是一点关系都没有的

#22


WHERE User='{0}'and
没加空格

#23


引用 21 楼 Z65443344 的回复:
SQL语句是数据库的语法
数据库不同,SQL语句也会略有区别
但是跟VS版本是一点关系都没有的


不是空格问题  现在就是不知道到底是区别在哪里  只要用WHERE子句筛选 均不行  

#24


应该与where语句无关的,如果SQL语句没有错误的话。真解决不了,那你还是用VS2010吧;

#25


你用碗和脸盆装米饭 但是你不能说你吃的米饭会因为脸盆变成肉丝,sql就是sql 怎么会随vs版本不同而不同呢

#26


引用 25 楼 rayyu1989 的回复:
你用碗和脸盆装米饭 但是你不能说你吃的米饭会因为脸盆变成肉丝,sql就是sql 怎么会随vs版本不同而不同呢


我意思就是SQL2012与VS2012是不是不协调  VS2012的SQL语句中where 子句是不是跟VS2010不一样呀
 算了 我还是用VS2010

#27


引用 26 楼 xph14798211847 的回复:
Quote: 引用 25 楼 rayyu1989 的回复:

你用碗和脸盆装米饭 但是你不能说你吃的米饭会因为脸盆变成肉丝,sql就是sql 怎么会随vs版本不同而不同呢


我意思就是SQL2012与VS2012是不是不协调  VS2012的SQL语句中where 子句是不是跟VS2010不一样呀
 算了 我还是用VS2010
肯定不存在这种问题

ExecuteNonQuery   执行存储过程.
[1].存储过程有返回值(传出参数)
    (1).把数据库中受影响的行数赋给返回值,这是得到的返回值是受影响的函数(大于或等于0的整数).
    (2).把某个值赋给返回值.
[2].存储过程没有返回值
    执行成功后返回 -1.
(没有返回值的存储过程理应 返回 受影响的行数 (执行 增删改) 但是.但我们在ado.net中执行存储过程的时候,dotnet 自动为给了存储过程一个默认值:set nocount on;
所以给我们的感觉是执行存储过程默认返回 -1  )

另外 你打印你vs2012读取出来的Properties.Settings.Default.SchoolConnectionString字符串看看和2010的一样,看看是否是哪里配置出现了问题

#28


catch
 { }
去掉你的try-catch,你就知道报什么错了,空catch是非常不推荐的,除非你确定那个异常可以不作处理

#29


把sql 打印出来 单独执行下看看

#30


WHERE User='{0}'and
WHERE User='{0}' and

仔细看到底啥区别,还说不是空格问题
饭吃噎着了,不要怪饭盆啊

#31


断点跟,把SQL语句复制出来,放客户端里执行,看到底怎么了