我目前正在尝试Select使用带有Datetime类型的参数在我的SQL Server数据库中执行.但我需要此参数只有格式YYYY-MM-DD日期,因为我正在使用的SQL中的以下查询,它正在工作:
select
idCliente, DescCliente, DescAnalista , StatusChamado , DataAtendimento
from
Atendimento
where
cast ([DataAtendimento] as date) = '2016-04-27';
Run Code Online (Sandbox Code Playgroud)
我阅读了几个帖子,表明我使用DbType或者.ToString在运行时发生错误,指出无法将字符串转换为日期/时间格式.
这是我如何使用SqlParameter:
DateTime date;
date = Data;
try
{
sqlClient.Command.Parameters.AddWithValue("@adate", date);
sqlClient.Command.CommandText = @" select idCliente, DescCliente, DescAnalista , StatusChamado , DataAtendimento from Atendimento where cast ([DataAtendimento] as date) = '@adate';";
Run Code Online (Sandbox Code Playgroud)
我需要你们的帮助,我找不到任何可以执行此选择的方法
我收到运行时错误说"Must declare the table variable "@parmTableName".不允许在sql语句中将表名作为sql参数.
有没有比允许sql注入攻击更好的选择或建议?我不想为sql语句做这个C#脚本" DELETE FROM " + tableName + " ";
using(var dbCommand = dbConnection.CreateCommand())
{
sqlAsk = "";
sqlAsk += " DELETE FROM @parmTableName ";
sqlAsk += " WHERE ImportedFlag = 'F' ";
dbCommand.Parameters.Clear();
dbCommand.Parameters.AddWithValue("@parmTableName", tableName);
dbConnection.Open();
rowAffected = dbCommand.ExecuteNonQuery();
}
Run Code Online (Sandbox Code Playgroud) 我需要使用以下语法了解DateTime值的大小参数:
adapter.InsertCommand.Parameters.Add("@deliveryDateAndTime", SqlDbType.DateTime,10,"deliveryDateAndTime");
Run Code Online (Sandbox Code Playgroud)
我无法使用以下语法,因为我正在将更新批处理在数据表中。
adapter.InsertCommand.Parameters.Add("@deliveryDateAndTime", SqlDbType.DateTime);
adapter.InsertCommand.Parameters["@deliveryDateAndTime"] = *variable*.value;
Run Code Online (Sandbox Code Playgroud)
以下是我需要使用的代码(为清楚起见,已缩写)。请注意,在adapter.InsertCommand.Parameters.Add("@deliveryDateAndTime", SqlDbType.DateTime,10,"deliveryDateAndTime");语句内部,第一个参数引用对应的SQL参数,第四个参数对应于数据表中该值的数据。
DataTable dt = new DataTable();
foreach (FuelDelivery fd in fuelDelivery.FuelDeliveries)
{
DataRow dr = dt.NewRow();
dr["deliveryDateAndTime"] = fd.DeliveryDateAndTime;
dt.Rows.Add(dr);
}
using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["HHSqlConnection"].ToString()))
{
// Create a SqlDataAdapter.
SqlDataAdapter adapter = new SqlDataAdapter();
// Set the INSERT command and parameter.
adapter.InsertCommand.Parameters.Add("@deliveryDateAndTime", SqlDbType.DateTime,10,"deliveryDateAndTime");
adapter.InsertCommand.UpdatedRowSource = UpdateRowSource.None;
// Set the batch size. Zero represents the maximum amt …Run Code Online (Sandbox Code Playgroud) 我试图只在需要时传递一个比特值(被检查).
我该怎么做呢?我的数据集没有变化.SQL Server 2008.
if (chkExpired.Checked)
CmdGetDetails.Parameters.Add(new SqlParameter("@isExpired", 1));
Run Code Online (Sandbox Code Playgroud) 如何将SqlParameter的值设置为相当于 SQL INSERT 语句的DEFAULT关键字?
MSDN 文档说“使用 null 或不设置 Value 以使用参数的默认值”。但是,执行任一操作都会导致 SqlException 抱怨未提供预期参数。我也尝试将参数设置为 DBNull.Value 但这导致抱怨不允许空值。
这样做的正确方法是什么?
-- table schema
CREATE TABLE SomeTable (Field INT NOT NULL DEFAULT(1));
using (var command = this.conn.CreateCommand())
{
command.CommandText = "INSERT [dbo].[SomeTable] ([Field]) VALUES (@p0);";
var param = new SqlParameter();
param.ParameterName = "@p0";
//param.Value = ??;
command.Parameters.Add(param);
command.ExecuteNonQuery();
}
Run Code Online (Sandbox Code Playgroud) 在有人评论之前已经在其他问题上回答过这个问题之前,我知道这一点......但是尽管我已经回顾了这些答案
甚至我自己的问题
我无法让我的查询返回带有null参数的值
我已经尝试简化我的代码,因此可以在这里看到.
我也试过这个
int? i = null;
SqlConnection connection = new SqlConnection(Properties.Settings.Default.connstring.ToString());
SqlCommand cmd = new SqlCommand();
cmd.Connection = connection;
cmd.CommandText = "Select * from view_nests where parent_pk = @parent_pk";
cmd.Parameters.AddWithValue("@parent_pk", i ?? Convert.DBNull);
cmd.Connection.Open();
var dataReader = cmd.ExecuteReader();
var dataTable = new DataTable();
dataTable.Load(dataReader);
cmd.Connection.Close();
Run Code Online (Sandbox Code Playgroud)
我尝试过这方面的变化
cmd.Parameters.AddWithValue("@parent_pk", DBNull.Value);
Run Code Online (Sandbox Code Playgroud)
我尝试过使用该查询
cmd.CommandText = "Select * from view_nests where parent_pk = @parent_pk or @parent_pk Is Null";
Run Code Online (Sandbox Code Playgroud)
我尝试将参数明确声明为可为空
cmd.Parameters.AddWithValue("@parent_pk", i ?? Convert.DBNull).IsNullable = true; …Run Code Online (Sandbox Code Playgroud) 我有一个 SQL Server 数据库,我想在图像类型列中存储一些字符串。
我正在尝试执行以下操作:
SqlParameter myparam = new SqlParameter("@myparam", "VeryLongString");
myparam.SqlDbType = SqlDbType.Image;
Run Code Online (Sandbox Code Playgroud)
当我将它添加到命令然后执行它时,我收到以下错误:
无法将参数值从字符串转换为字节[]
似乎是什么问题?
提前致谢
我有一个SQL存储过程,它接受一个默认值为NULL的DateTime参数
@pmNext_Check_Date DATETIME=NULL
Run Code Online (Sandbox Code Playgroud)
我想在3个场景中使用此参数:
这是SP中的代码块导致我的问题(UPDATE语句的其余部分是在SP的其他地方构建并且工作正常):
IF @pmNext_Check_Date IS NOT NULL
IF @pmNext_Check_Date ='' --This is the bit that is causing me a problem. I just need to check for a empty date
SET @sql = @sql + ' Next_Check_Date = NULL '
ELSE
SET @sql = @sql + ' Next_Check_Date = @pmNext_Check_Date '
SET @sql = @sql + ' WHERE ID IN (1, 2)'
Run Code Online (Sandbox Code Playgroud)
例如,如果我有以下2行:
ID NextCheckDate
1 12/12/12
2 NULL
在方案1中,我不会传递参数,因为过程将使用默认值,并且不会更新任何日期.
在方案2中,我传入一个日期值并使用日期值更新这两行
在方案3中,我想将行上的日期值更新为null.方案1和方案3之间的区别在于方案3,用户将选择将日期值设置为空.
所以,我想将一个空白日期传递给存储过程.我是用C#做的,想做类似下面的事情:
SqlParameter param …Run Code Online (Sandbox Code Playgroud) 我想了解哪种用法是正确的?
if(!string.IsNullOrEmpty(parentID))
cmd.Parameters.Add(new SqlParameter("@ParentSesID", parentID));
else
cmd.Parameters.Add(new SqlParameter("@ParentSesID", DBNull.Value));
Run Code Online (Sandbox Code Playgroud)
要么
if(!string.IsNullOrEmpty(parentID))
cmd.Parameters.Add(new SqlParameter("@ParentSesID", parentID));
else
cmd.Parameters.Add(new SqlParameter("@ParentSesID", DBNull.Value.ToString()));
Run Code Online (Sandbox Code Playgroud) 我在 SQL Server 中有一个存储过程,它有一个输出参数 pf type numeric(18,0)。我在 C# 中创建了一个SqlParameter带有 a 的对象SqlDbType.Decimal,并将精度设置为 18,小数位数设置为 0。
这是我的代码:
queryParameters[2] = new SqlParameter("@Id", SqlDbType.Decimal);
queryParameters[2].Precision = 18; // # digits
queryParameters[2].Scale = 0; // # decimals
queryParameters[2].Direction = ParameterDirection.Output;
Run Code Online (Sandbox Code Playgroud)
存储过程正确执行,并正确返回输出参数,但是当我将其解析为 C# 中的 long 变量时,如下所示:
long id = (long)queryParameters[2].Value;
Run Code Online (Sandbox Code Playgroud)
它说无法转换它。
但如果我将SqlParameter类型修改为SqlDbType.Bigint,那么它就可以工作。
那么我通过将其传递为 所做的事情是正确的吗SqlDbType.BigInt?或者最好将其作为传递SqlDbType.Decimal,然后使用十进制 C# 变量而不是 long ?
将其传递SqlDbType.Decimal为然后执行以下操作也有效:
decimal id = (decimal)queryParameters[2].Value;
Run Code Online (Sandbox Code Playgroud)
那么,考虑到这个数字是没有小数的整数,最好采用什么方法呢?
c# sqldbtype sql-server-2008 sql-server-2008-r2 sqlparameter
sqlparameter ×10
c# ×8
sql-server ×4
datetime ×3
.net ×2
dbnull ×2
ado.net ×1
date ×1
image ×1
sqlcommand ×1
sqldbtype ×1
string ×1