SQL2008如何跟踪某台电脑的执行语句

SQL2008如何跟踪某台电脑的执行语句,第1张

1、选择要 *** 作的数据库。

2、依次选择“表”-“查询”。

3、单击创建查询按钮。

4、在如下的查询编辑器中输入要执行的sql语句

5、输入完成后单击运行按钮执行语句。

6、语句执行的信息、状态、及概况可以在下面查看

1、ExecuteQuery方法

看命名,我们很容易联想到ADONET里熟悉的Command的ExecuteNonQuery方法,但是VS的智能提示告诉我们这个方法返回的是一个泛型集合,应该“所思非所得”。下面通过一个简单方法,验证我们的猜想(数据库设计可以参考这一篇):

/// <summary>

/// 直接执行sql语句,获取总人数

/// </summary>

/// <returns></returns>

publicint GetTotalCount()

{

string strSql = "SELECT COUNT(0) FROM Person(NOLOCK)";

var query = dataContextExecuteQuery<int>(strSql);

int result = queryFirst<int>();

ConsoleWriteLine();

ConsoleWriteLine("total count:{0}", result);

return result;

}

调试的时候,通过IntelliTrace跟踪到:

毫无疑问,上面的说明最初的想法是不正确的,”ADONET:执行Reader…”云云,让我们更加坚信它实际执行的应该是ExecuteReader方法。当然最简单的方法是直接查看它的方法说明:

// 摘要:

// 直接对数据库执行 SQL 查询并返回对象。

//

// 参数:

// query:

// 要执行的 SQL 查询。

//

// parameters:

// 要传递给命令的参数数组。注意下面的行为:如果数组中的对象的数目小于命令字符串中已标识的最大数,

则会引发异常。如果数组包含未在命令字符串中引用的对象,则不会引发异常。如果某参数为

// null,则该参数会转换为 DBNullValue。

//

// 类型参数:

// TResult:

// 返回的集合中的元素的类型。

//

// 返回结果:

// 由查询返回的对象的集合。

public IEnumerable<TResult> ExecuteQuery<TResult>(string query, paramsobject[] parameters);

ExecuteQuery方法还有一个非泛型方法:

//

// 摘要:

// 直接对数据库执行 SQL 查询。

//

// 参数:

// elementType:

//

要返回的 SystemCollectionsGenericIEnumerable<T>

的类型。使查询结果中的列与对象中的字段或属性相匹配的算法如下所示:如果字段或属性映射到特定列名称,则结果集中应包含该列名称。如果未映射字段或属性,则结果集中应包含其名称与该字段或属性相同的列。通过先查找区分大小写的匹配来执行比较。如果未找到匹配项,则会继续搜索不区分大小写的匹配项。如果同时满足下列所有条件,则该查询应当返回(除延迟加载的对象外的)对象的所有跟踪的字段和属性:T

// 是由 SystemDataLinqDataContext 显式跟踪的实体。

SystemDataLinqDataContextObjectTrackingEnabled

// 为 true。实体具有主键。否则会引发异常。

//

// query:

// 要执行的 SQL 查询。

//

// parameters:

// 要传递给命令的参数数组。注意下面的行为:如果数组中的对象的数目小于命令字符串中已标识的最大数,

则会引发异常。如果数组包含未在命令字符串中引用的对象,则不会引发异常。如果某参数为

// null,则该参数会转换为 DBNullValue。

//

// 返回结果:

// 由查询返回的对象的 SystemCollectionsGenericIEnumerable<T> 集合。

public IEnumerable ExecuteQuery(Type elementType, string query, paramsobject[] parameters);

看它的参数需要多传递一个elementType,明显不如泛型方法简洁。

2、ExecuteCommand方法

同样道理,这个方法立刻让我们联想到(世界没有联想,生活将会怎样?),联想到,等等,不知联想到什么。然后我们看一下方法使用说明:

//

// 摘要:

// 直接对数据库执行 SQL 命令。

//

// 参数:

// command:

// 要执行的 SQL 命令。

//

// parameters:

// 要传递给命令的参数数组。注意下面的行为:如果数组中的对象的数目小于命令字符串中已标识的最大数,

则会引发异常。如果数组包含未在命令字符串中引用的对象,则不会引发异常。如果任一参数为

// null,则该参数会转换为 DBNullValue。

//

// 返回结果:

// 一个 int,表示所执行命令修改的行数。

publicint ExecuteCommand(string command, paramsobject[] parameters);

到这里,看它的返回类型为int,表示执行命令修改的行数,这次很容易想到ExecuteNonQuery方法。对不对呢?通过下面的代码证明我们的设想:

/// <summary>

/// 直接执行sql语句 根据用户Id更新体重

/// </summary>

/// <param name="id">用户Id</param>

/// <param name="destWeight">更新后的体重</param>

/// <returns></returns>

publicint ModifyWeightById(int id, double destWeight)

{

string strSql = stringFormat("UPDATE Person SET Weight={0} WHERE Id={1}", destWeight, id);

int result = dataContextExecuteCommand(strSql);

ConsoleWriteLine();

ConsoleWriteLine("affect num:{0}", result);

return result;

}

调试过程中,通过IntelliTrace可以很清楚地捕获:

“ADONET:执行NonQuery…”基本可以断言我们的设想是正确的。

3、防止sql注入

1和2中,执行sql语句的两个方法都有一个params 类型的参数,我们又会想到ADONET非常重要的sql语句的参数化防止sql注入问题。下面通过一个方法,看看linq2sql可不可以防止sql注入。

(1)、直接执行拼接的sql语句(有风险)

/// <summary>

/// 直接执行sql语句 根据用户Id更新FirstName

/// </summary>

/// <param name="id">用户Id</param>

/// <param name="destName">更新后的FirstName</param>

/// <returns></returns>

publicint ModifyNameById(int id, string destName)

{

string strSql = stringFormat("UPDATE Person SET FirstName='{0}' WHERE Id={1}", destName, id);

//这么拼接有风险

int result = dataContextExecuteCommand(strSql);

ConsoleWriteLine();

ConsoleWriteLine("affect num:{0}", result);

return result;

}

然后,在客户端这样调用这个方法:

int result = ServiceFactoryCreatePersonService()ModifyNameById(10, "'Anders'");

//更新id为10的人的FirstName

1、打开ACCESS数据库,找到右边的空数据,单击d出对话框,让你选择数据库保存的路径和名称,大家根据自己的实际情况保存吧,我这里使用默认的。

2、创建数据库完成后,会生成一个小窗口,在右侧的白色区域找到使用设计器创建表,因为做演示。

3、建了一个简单的学生表,完后之后CTRL+S保存,d出对话框,输入表名单击确定。

4、接下来在左侧灰色区域找到查询并单击,右侧白色区域会有两个链接,单击在设计视图中创建查询--选中表名添加--(代表所有字段),在标题栏上面右键--SQL视图。

5、写入你的SQL语句,写好之后CTRL+S保存,d出对话框--查询名称(随意)--确定,完后之后在右侧的白色区域会生成你刚才保存的SQL语句,找到名称后双击即可显示SQL执行结果。

以上就是关于SQL2008如何跟踪某台电脑的执行语句全部的内容,包括:SQL2008如何跟踪某台电脑的执行语句、如何直接执行SQL语句、Access2010中如何运行SQL执行SQL语句等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/9593398.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-30
下一篇2023-04-30

发表评论

登录后才能评论

评论列表(0条)

    保存