none
sqlserver一个密码问题 RRS feed

  • 问题

  • 版本信息:

    Microsoft SQL Server 2014 - 12.0.2000.8 (X64)
     Feb 20 2014 20:04:26
     Copyright (c) Microsoft Corporation
     Enterprise Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) (Hypervisor)

    如果密码设置为以下

    3ghyd123456,.~;"

    用SSMS是可以正常连接的,用c#写的连接程序(ADO.NET3.5),始终连接不上,程序就死在那里一直没有反应,如果故意把密码输错,反而快速可以反馈给客户端,提示失败!到底是SQLSERVER问题还是客户端问题,大家如果有兴趣可以测试一下!

    2014年11月20日 14:17

答案

  • 密码中有;导致的吧,你试试改一个密码,不要包含;"这类的字符
    • 已标记为答案 wanyongwy 2014年11月22日 5:38
    2014年11月21日 1:10
  • 你可以試試看下列的程式碼,重點在於雙引號的部分要用兩個雙引號來表示。

    static void Main(string[] args)
            {
                SqlConnectionStringBuilder scsb = new SqlConnectionStringBuilder();
                scsb.DataSource = @"(localdb)\v11.0";
                scsb.InitialCatalog = "Northwind";
                scsb.UserID = "l";
                scsb.Password = @"3ghyd123456,.~;""";
                Console.WriteLine(scsb.ToString());
    
                using (SqlConnection con = new SqlConnection(scsb.ToString()))
                {
                    con.Open();
                    using (SqlCommand cmd = new SqlCommand("select * from region",con))
                    {
                        SqlDataReader reader = cmd.ExecuteReader();
                        while(reader.Read())
                        {
                            Console.WriteLine(string.Format("{0},{1}", reader[0].ToString(), reader[1].ToString()));
                        }
                    }
                }
                Console.Read();
            }


    | SQL PASS Taiwan Page | SQL PASS Taiwan Group

    | My Blog

    • 已标记为答案 wanyongwy 2014年11月22日 5:39
    2014年11月21日 6:29

全部回复

  • Maybe c# doesn't like some special character in that password.
    2014年11月20日 14:57
  • 密码中有;导致的吧,你试试改一个密码,不要包含;"这类的字符
    • 已标记为答案 wanyongwy 2014年11月22日 5:38
    2014年11月21日 1:10
  • MSSQL 中有3 個 char 要小心處理的,

    1) '
    2) %
    3) _

    比較普遍的,如 ' (single quote) 的話,
    INSERT into table1 ([col1]) VALUES (‘La'Souza’)

    我們要把它改為 '' (2個 single quote)
    INSERT into table1 ([col1]) VALUES (‘La''Souza’)

    你可以參考一下這連結

    http://www.techtamasha.com/escape-single-quotes-and-wild-cards-_-in-ms-sql/20


    大家一齊探討、學習和研究,謝謝!
    MCSD, MCAD, MCSE+I, MCDBA, MCDST, MCSA, MCTS, MCITP, MCPD,
    MCT, Microsoft Community Star(TW & HK),
    Microsoft MVP for VB.NET since 2003
    My MSMVP Blog

    請記得將對您有幫助的回覆標示為解答以幫助其他尋找解答及參與社群討論的朋友們。
    Please remember to clickMark as Answer on the post that helps you. This can be beneficial to other community members reading the thread.

    2014年11月21日 1:54
  • 再次测试,发现如下:

    SQLSERVER2008也存在该问题

    但是SSMS连接的话,是可以成功的,我觉得应该是客户端SQLCLIENT的问题

    密码中如果以字符 ; 结尾,那么程序会马上返回连接失败的提示

    密码中如果含有字符 ;  其后再跟任意一个字符,那么程序会卡死,不会提示失败也不会提示成功!

    2014年11月21日 6:03
  • 你可以試試看下列的程式碼,重點在於雙引號的部分要用兩個雙引號來表示。

    static void Main(string[] args)
            {
                SqlConnectionStringBuilder scsb = new SqlConnectionStringBuilder();
                scsb.DataSource = @"(localdb)\v11.0";
                scsb.InitialCatalog = "Northwind";
                scsb.UserID = "l";
                scsb.Password = @"3ghyd123456,.~;""";
                Console.WriteLine(scsb.ToString());
    
                using (SqlConnection con = new SqlConnection(scsb.ToString()))
                {
                    con.Open();
                    using (SqlCommand cmd = new SqlCommand("select * from region",con))
                    {
                        SqlDataReader reader = cmd.ExecuteReader();
                        while(reader.Read())
                        {
                            Console.WriteLine(string.Format("{0},{1}", reader[0].ToString(), reader[1].ToString()));
                        }
                    }
                }
                Console.Read();
            }


    | SQL PASS Taiwan Page | SQL PASS Taiwan Group

    | My Blog

    • 已标记为答案 wanyongwy 2014年11月22日 5:39
    2014年11月21日 6:29
  • 再次测试,发现如下:

    SQLSERVER2008也存在该问题

    但是SSMS连接的话,是可以成功的,我觉得应该是客户端SQLCLIENT的问题

    密码中如果以字符 ; 结尾,那么程序会马上返回连接失败的提示

    密码中如果含有字符 ;  其后再跟任意一个字符,那么程序会卡死,不会提示失败也不会提示成功!

    SSMS use the same client provider as C#,may be the situation cause by the special character

    you could chang the  password of login user with no  special character such as  3ghyd123456

    after that , reconnect to sql with new password in C#

    GOOD LUCK

    2014年11月21日 7:45
  • 你们居然不做防注入......怪不得中国网上充满了这类消息

    2014年11月21日 9:11
  • 哈哈 这里应该是没有SQL注入的
    2014年11月22日 5:39