none
初学者C# RRS feed

答案

  • 你这行代码是在SQL 语句中的吧?


    SQL SERVER 规定,SQL 语句的变量前面必须要加上@ 符号,表明是SQL 变量。 前一个StudentID 是字段名,@StudentID 是SQL 变量。
    • 已标记为答案 Smiling008 2010年1月22日 9:11
    2010年1月22日 9:03
  • c#中加号表示连接两个字符串,
    双引号表示字符串 如 string str="aa";

    SQLSERVER中表示一个字符串用单引号表示


    在C#中是这样

    "select * from user where username = '" +
       userName +
     "' and pwd = '"
    + pwd

    + "'"

    到SQL中就变成这样了,222和111是传入的用户名和密码的值

    select * from user where username ='222' and pwd ='111'

    努力+方法=成功
    • 已标记为答案 Smiling008 2010年1月22日 10:09
    2010年1月22日 9:59
  • + 是运算算,这里即两个字符串相加
    单引号 SQL 语句中的字符串表现方式
    双引号是 C# 中字符串的表现方式


    知识改变命运,奋斗成就人生!
    • 已标记为答案 Smiling008 2010年1月22日 10:10
    2010年1月22日 10:01

全部回复

  • @代表字符串不允许转义的意思
    还有个意思在ado.net的 sqlcommand的参数值的标记
    2010年1月22日 9:03
  • 你这行代码是在SQL 语句中的吧?


    SQL SERVER 规定,SQL 语句的变量前面必须要加上@ 符号,表明是SQL 变量。 前一个StudentID 是字段名,@StudentID 是SQL 变量。
    • 已标记为答案 Smiling008 2010年1月22日 9:11
    2010年1月22日 9:03
  • 你好!

    这是访问数据时的形式。使用这样的方式可以有效的避免 SQL 注入。具体用法如下:

    SqlCommand comm = new SqlCommand();
    
    comm.Connection = YourConnection;
    
    comm.CommandText = "INSERT INTO Table1 (Id, Name) VALUES (@Id, @Name)";
    comm.Parameters.AddWithValue("@Id", 1);
    comm.Parameters.AddWithValue("@Name", "xxy");
    comm.Connection.Open();
    comm.ExecuteNonQuery();




    知识改变命运,奋斗成就人生!
    2010年1月22日 9:06
  • 是SQL语句中的代码,本人学习开发系统时遇到这个问题的,谢谢您的解答!
    2010年1月22日 9:11
  • 按你的写法@代表以参数形式的SQL语句

                SqlConnection con = new SqlConnection();
                con.Open();
                SqlTransaction tran = con.BeginTransaction();
                SqlCommand cmd = new SqlCommand();
                cmd.CommandText = "select * from table where StudentID=@StudentID";
                cmd.Connection = con;
    
                SqlParameter id = new SqlParameter("@StudentID",SqlDbType.NVarChar);
                id.Value = textBox1.Text;//        textBox1.Text是给StudentID赋值
    
                cmd.Parameters.Add(id);
    
                SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);

    努力+方法=成功
    2010年1月22日 9:11
  • 不好意思,再麻烦问您一下,避免SQL注入中的“注入”什么意思,我想弄的更清楚一些,便于我以后的学习
    2010年1月22日 9:14
  • SQL注入是防止一些人输入一些特殊的字符,使SQL语句成为恒等语句,进入SQL数据库

    也就是“攻击”的意思

    努力+方法=成功
    • 已编辑 开心 2010年1月22日 9:21
    • 已建议为答案 leo.com 2010年1月22日 9:22
    2010年1月22日 9:17
  • 谢谢啦,这是本人第一次使用论坛提问的方式,真的非常谢谢你们,一个知识点的提问让我对SQL有了更进一步的认识!
    2010年1月22日 9:21
  • 举个简单的例子。

    // 比如登陆界面你在 C# 中写
    string userName = "1' or '1'='1"; // 比如我输入这样的用户名
    string pwd = "x";
    string sql = "select * from user where username = '" + userName + "' and pwd = '" + pwd + "'";

    // 最终得到下面的 SQL,即可以通过验证
    // select * from user where username = '1' or '1'='1' and pwd = 'x'

    知识改变命运,奋斗成就人生!
    2010年1月22日 9:21
  • 我想在请教一下,在进行数据库的链接查询时,经常使用您刚刚提到的语句string sql = "select * from user where username = '" + userName + "' and pwd = '" + pwd + "'";这个意思,我大致能明白,但我长期以来都不太了解其中的尤其是"select * from user where username = '" + userName + "' and pwd = '" + pwd + "'"中‘+’和单、双引号的具体含义,希望您能够在给我详细的讲解一下,麻烦了
    2010年1月22日 9:52
  • c#中加号表示连接两个字符串,
    双引号表示字符串 如 string str="aa";

    SQLSERVER中表示一个字符串用单引号表示


    在C#中是这样

    "select * from user where username = '" +
       userName +
     "' and pwd = '"
    + pwd

    + "'"

    到SQL中就变成这样了,222和111是传入的用户名和密码的值

    select * from user where username ='222' and pwd ='111'

    努力+方法=成功
    • 已标记为答案 Smiling008 2010年1月22日 10:09
    2010年1月22日 9:59
  • + 是运算算,这里即两个字符串相加
    单引号 SQL 语句中的字符串表现方式
    双引号是 C# 中字符串的表现方式


    知识改变命运,奋斗成就人生!
    • 已标记为答案 Smiling008 2010年1月22日 10:10
    2010年1月22日 10:01
  • 按您的意思,我可以这样理解么,“+userName+”最终所形成的字符串是和username这个字段名相连接么?
    2010年1月22日 10:07
  • 建议先了解一些基础的知识,再看其它的。
    知识改变命运,奋斗成就人生!
    2010年1月22日 10:14
  • 您说的没错,我正在一边复习C#的基础知识,一边开始学者慢慢做东西的,因为我感觉这样对概念的理解才会更深入一些。

    2010年1月22日 10:40
  • “+”拼接,会引起注入攻击,建议格式化传参
    2018年1月24日 10:19