我看到在大多数样本中,SqlCommand都是这样使用的
using (SqlConnection con = new SqlConnection(CNN_STRING))
{
using (SqlCommand cmd = new SqlCommand("Select ID,Name From Person", con))
{
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
da.Fill(ds);
return ds;
}
}
Run Code Online (Sandbox Code Playgroud)
我知道为什么我们使用"使用"声明.但是SqlCommand没有包含Close()方法,所以我们应该在using语句中使用它
我有一个存储过程,从Sql Server Management Studio(2秒)执行速度比运行时System.Data.SqlClient.SqlCommand(2分钟后超时).
这可能是什么原因?
详细信息:在Sql Server Management Studio中,这将在2秒内运行(在生产数据库上):
EXEC sp_Stat
@DepartmentID = NULL
在.NET/C#中,以下在2分钟后超时(在生产数据库上):
string selectCommand = @"
EXEC sp_Stat
@DepartmentID = NULL";
string connectionString = "server=***;database=***;user id=***;pwd=***";
using (SqlConnection connection = new SqlConnection(connectionString))
{
using (SqlCommand command = new SqlCommand(selectCommand, connection))
{
connection.Open();
using (SqlDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我也试图与selectCommand = "sp_Stat",CommandType = StoredProcedure和SqlParameter,但它是同样的结果.
没有EXEC它也是同样的结果.
在几乎数据空的开发数据库中,两个案例都在不到1秒的时间内完成.所以它与数据库中存在大量数据有关,但它似乎只发生在.NET ...
马克·格拉维尔(Marc Gravell)所写的关于不同SET价值观的内容在所呈现的案 …
我知道这不是一个有用的问题的地狱,但我不禁被它所困扰.
那么,
为什么所说的方法(在*Command类中)被称为
ExecuteNonQuery而不是ExecuteQuery?
这些SQL语句不是我们在DBs,查询中抛出的吗?
我似乎对如何In使用a 执行语句感到困惑SqlParameter.到目前为止,我有以下代码:
cmd.CommandText = "Select dscr from system_settings where setting in @settings";
cmd.Connection = conn;
cmd.Parameters.Add(new SqlParameter("@settings", settingList));
reader = cmd.ExecuteReader();
Run Code Online (Sandbox Code Playgroud)
settingsList是一个List<string>.当cmd.ExecuteReader()被调用时,ArgumentException由于无法将a映射List<string>到"已知的提供者类型" ,我得到了.
如何(安全地)In使用SqlCommands 执行查询?
我发送ID作为outparameter,但它给出了错误
System.Data.SqlClient.SqlException:过程或函数'usp_ClientHistoryItem'需要参数'@ID',这是未提供的.
码
using (SqlCommand cmd = new SqlCommand("dbo.usp_ClientHistoryItem", conn))
{
SqlParameter parameterID = new SqlParameter("@ID", oReservation.Id);
parameterID.Direction = ParameterDirection.Output;
cmd.Parameters.Add(parameterID);
cmd.Parameters.Add(new SqlParameter("@PhoneNo", oReservation.ClientPhone));
cmd.Parameters.Add(new SqlParameter("@UserId", oReservation.UserID));
cmd.Parameters.Add(new SqlParameter("@Description", oReservation.Description));
cmd.Parameters.Add(new SqlParameter("@TestId", oReservation.TestId));
cmd.Parameters.Add(new SqlParameter("@StartDate", oReservation.StartDate));
cmd.ExecuteNonQuery();
returnValue = Convert.ToInt32(cmd.Parameters["@ID"].Value);
return returnValue;
}
Run Code Online (Sandbox Code Playgroud) 我正在构建一个自定义数据库部署实用程序,我需要读取包含sql脚本的文本文件并对数据库执行它们.
非常简单的东西,到目前为止一切顺利.
但是我遇到了一个障碍,文件的内容被成功完整地读取,但是一旦传入SqlCommand然后用SqlCommand.ExecuteNonQuery执行,只执行部分脚本.
我启动了Profiler并确认我的代码没有传递所有脚本.
private void ExecuteScript(string cmd, SqlConnection sqlConn, SqlTransaction trans)
{
SqlCommand sqlCmd = new SqlCommand(cmd, sqlConn, trans);
sqlCmd.CommandType = CommandType.Text;
sqlCmd.CommandTimeout = 9000000; // for testing
sqlCmd.ExecuteNonQuery();
}
// I call it like this, readDMLScript contains 543 lines of T-SQL
string readDMLScript = ReadFile(dmlFile);
ExecuteScript(readDMLScript, sqlConn, trans);
Run Code Online (Sandbox Code Playgroud) 将数据插入数据库的最佳方法是什么?
这就是我所拥有的,但这是错的..
cmd.CommandText = "INSERT INTO klant(klant_id,naam,voornaam) VALUES(@param1,@param2,@param3)";
cmd.Parameters.Add(new SqlParameter("@param1", klantId));
cmd.Parameters.Add(new SqlParameter("@param2", klantNaam));
cmd.Parameters.Add(new SqlParameter("@param3", klantVoornaam));
Run Code Online (Sandbox Code Playgroud)
该函数将数据添加到listBox中
http://www.pictourl.com/viewer/37e4edcf (link is dead)
但没有进入数据库..
http://www.pictourl.com/viewer/4d5721fc (link is dead)
全功能:
private void Form1_Load(object sender, EventArgs e)
{
conn2 = new SqlConnection();
conn2.ConnectionString = ConfigurationManager.ConnectionStrings["connSpionshopString"].ConnectionString;
}
private void button2_Click(object sender, EventArgs e)
{
string sqlCmd = "SELECT naam,voornaam,klant_id FROM klant;";
SqlCommand cmd = new SqlCommand(sqlCmd, conn2);
conn2.Open();
using(SqlDataReader reader = cmd.ExecuteReader())
{
while (reader.Read())
{
listBox2.Items.Add(reader.GetString(0) + " " + reader.GetString(1) + " …Run Code Online (Sandbox Code Playgroud) 在我的程序中,我需要使用该if语句检查表中是否已存在数据库中的记录.使用c#我试图通过SQL连接来做到这一点.因为我认为该ExecuteNonQuery();命令返回一个整数值,如果我的假设是真的,我想知道什么值是真的知道表中是否存在某条记录.这是我的代码示例:
using (SqlConnection sqlConnection = dbUtil.GetSqlConnection(dbUtil.GetConnectionStringByName("NonConnectionString")))
{
using (SqlCommand sqlCommand = new SqlCommand("SELECT * from users where user_name like 'Adam' AND password like '123456'", sqlConnection))
{
sqlresult = sqlCommand.ExecuteNonQuery();
}
}
Run Code Online (Sandbox Code Playgroud)
考虑到sqlresult之前已经在main中进行了初始化,int sqlresult;
因此我想知道,如果这个用户'Adam'存在于数据库中,或者不存在.如果他存在,那么我想继续进行'if'语句,例如:
if(sqlresult == 0)
{
MessageBox.Show("Adam exists!");
}
Run Code Online (Sandbox Code Playgroud)
所以我只是不知道它应该返回的整数,我要么不确定这是正确的方法来做到这一点.
谢谢.
我要做的是创建一些带参数的任意sql命令,设置参数的值和类型,然后返回解析的sql命令 - 包含参数.我不会直接对sql数据库运行此命令,因此不需要连接.因此,如果我运行下面的示例程序,我希望看到以下文本(或类似的东西):
WITH SomeTable (SomeColumn)
AS
(
SELECT N':)'
UNION ALL
SELECT N'>:o'
UNION ALL
SELECT N'^_^'
)
SELECT SomeColumn FROM SomeTable
Run Code Online (Sandbox Code Playgroud)
示例程序是:
using System;
using System.Data;
using System.Data.SqlClient;
namespace DryEraseConsole
{
class Program
{
static void Main(string[] args)
{
const string COMMAND_TEXT = @"
WITH SomeTable (SomeColumn)
AS
(
SELECT N':)'
UNION ALL
SELECT N'>:o'
UNION ALL
SELECT @Value
)
SELECT SomeColumn FROM SomeTable
";
SqlCommand cmd = new SqlCommand(COMMAND_TEXT);
cmd.CommandText = COMMAND_TEXT;
cmd.Parameters.Add(new SqlParameter
{
ParameterName = …Run Code Online (Sandbox Code Playgroud) sqlcommand ×10
c# ×7
.net ×5
ado.net ×3
sql ×2
database ×1
dbcommand ×1
oledbcommand ×1
sql-server ×1
sqlclient ×1
sqlparameter ×1