在CLR(公共语言运行库)下执行的代码,叫做托管代码,反之则叫非托管代码.
那我怎么知道这个代码是否在公共语言运行库中呢?
 [DllImport("User32.dll")] 是非托管代码,也就是不在CLR下运行的.书上说 [DllImport("User32.dll")]是非托管,可是我不会辨别这段代码是否是托管?还有一个问题:
sqlcommand2.CommandText = "select sno,sname,sage FROM student WHERE(sdept =@sdept)";
            sqlcommand2.Parameters.Add("sdept",SqlDbType.Char);
            sqlcommand2.Parameters[0].Value = comboBox1.Text;
sdept=@sdept    @是占位符,我知道它的名字叫占位符,可是具体怎么用,什么意思我不明白,
sqlcommand2.Parameters.Add("sdept",SqlDbType.Char);        Parameters  是一个参数集合,把commandtext执行后的结果添加进这个集合中,并且是Char类型,这样解释总感觉有问题,

解决方案 »

  1.   

    非托管前提是你的dll种函数也是非托管的,这就是说User32.dll中存在非托管函数
      

  2.   

    Parameters 是
    参数集合没错,但不是在commandtext执行后,
    相反,在执行前,提供参数,供commandtext运行
    这句
    sqlcommand2.CommandText = "select sno,sname,sage FROM student WHERE(sdept =@sdept)";
    sqlcommand2.Parameters.Add("sdept",SqlDbType.Char);
    sqlcommand2.Parameters[0].Value = comboBox1.Text;
    等效于
    sqlcommand2.CommandText = "select sno,sname,sage FROM student WHERE(sdept ='+ comboBox1.Text+')";
      

  3.   

    dllimport声明的方法肯定是非托管dll中的函数
    托管dll中的方法直接using xxx就可以引用了
      

  4.   

    Parameters 是
    参数集合没错,但不是在commandtext执行后,
    相反,在执行前,提供参数,供commandtext运行
    sqlcommand2.Parameters.Add("sdept",SqlDbType.Char);
    在什么时候执行commandtext?在哪个代码后?
    等效于
    sqlcommand2.CommandText = "select sno,sname,sage FROM student WHERE(sdept ='+ comboBox1.Text+')";

    那Parmeters不是没有用了?  Parmeters的作用是干什么的呢?还有@占位符我还是不明白,呵呵,麻烦你了
      

  5.   

    辨别是否是托管或非托管
    dllimport的就是非托管using的全都是托管?对吗?
      

  6.   

    sqlcommand2.CommandText = "select sno,sname,sage FROM student WHERE(sdept =@sdept)";
    sqlcommand2.Parameters.Add("sdept",SqlDbType.Char);
    sqlcommand2.Parameters[0].Value = comboBox1.Text;
    sqlcommand2.ExecuteQuery(commandtext);//在这句执行commandtext用Parameters大概有这么几个好处:
    sql的参数直观清晰,便于维护,可读性强,改动方便
    减少sql注入的发生可能
      

  7.   

    用Parameters大概有这么几个好处:
    sql的参数直观清晰,便于维护,可读性强,改动方便
    减少sql注入的发生可能还是 Sql 安全性的问题啊  恩 好的
      

  8.   

    一个函数需要参数,一个sql语句有时候同样需要参数啊,SqlParameter就是参数封装了的形式,它指明了参数类型,长度,如果是输入参数,还应该指明参数值。当然也可以不用SqlParamter类,直接拼字符串,但那样容易被黑客攻击,具体原因请看书。可以理解原始的Win32函数为非托管代码,不由CLR控制,编译之后的exe文件可以直接运行了
    而.Net中写的代码为托管代码,托管代码编译后不能直接运行,需要CLR的参与,具体参与法请看书。
      

  9.   

    辨别是否是托管或非托管
    dllimport的就是非托管using的全都是托管?这样说对吗?kernel32函数的各种方法,我怎么才能查到呢?
    有人说通过wdasm工具获得的kernel32.dll的函数,可好象都是英文的,我还是不知道什么时候用啊?
      

  10.   

    读取pe文件格式,判定PE文件中的标志
    Assembly.Load 成功就算托管的
      

  11.   

    当然不是DllImport是.NET中的一个类型,用来调用标准DLL的导出函数。标准DLL不是托管的,COM以及COM系列的都不是托管的。
    using也是.NET的一个关键字,这个关键字说明当前文件将引用using后面的命名空间,这样在使用这个命名空间里面的类就不需要全名了。是否为托管代码主要看PE文件里面的头部信息(CLI header)。