标签: sqlparameter

C#在SQL Server中选择只使用带有sql参数的Date

我目前正在尝试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)

我需要你们的帮助,我找不到任何可以执行此选择的方法

c# sql-server datetime date sqlparameter

3
推荐指数
1
解决办法
445
查看次数

SqlParameter不允许表名 - 没有sql注入攻击的其他选项?

我收到运行时错误说"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)

c# sql-server sql-server-2008 sqlparameter

2
推荐指数
2
解决办法
1万
查看次数

InsertCommand.Parameters.Add datetime的size参数

我需要使用以下语法了解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)

.net c# ado.net datetime sqlparameter

2
推荐指数
1
解决办法
6463
查看次数

如何在SqlParameter中为数据类型位传递正确的对象值?

我试图只在需要时传递一个比特值(被检查).

我该怎么做呢?我的数据集没有变化.SQL Server 2008.

if (chkExpired.Checked)
    CmdGetDetails.Parameters.Add(new SqlParameter("@isExpired", 1));
Run Code Online (Sandbox Code Playgroud)

c# sqlparameter

2
推荐指数
1
解决办法
7758
查看次数

SqlParameter - 设置为默认值

如何将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)

.net sqlcommand sqlparameter

2
推荐指数
1
解决办法
1066
查看次数

如何将空值传递给SqlCommand的参数

在有人评论之前已经在其他问题上回答过这个问题之前,我知道这一点......但是尽管我已经回顾了这些答案

甚至我自己的问题

我无法让我的查询返回带有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)

c# sql-server dbnull sqlparameter

2
推荐指数
2
解决办法
8987
查看次数

如何使用 SqlParameter 在 SQL Server 中的图像类型列中存储字符串

我有一个 SQL Server 数据库,我想在图像类型列中存储一些字符串。

我正在尝试执行以下操作:

SqlParameter myparam = new SqlParameter("@myparam", "VeryLongString");
myparam.SqlDbType = SqlDbType.Image;
Run Code Online (Sandbox Code Playgroud)

当我将它添加到命令然后执行它时,我收到以下错误:

无法将参数值从字符串转换为字节[]

似乎是什么问题?

提前致谢

sql-server string image sqlparameter

1
推荐指数
1
解决办法
2131
查看次数

将空DateTime值发送到SQL存储过程.但不是空的

我有一个SQL存储过程,它接受一个默认值为NULL的DateTime参数

@pmNext_Check_Date DATETIME=NULL
Run Code Online (Sandbox Code Playgroud)

我想在3个场景中使用此参数:

  1. 如果它为NULL,则不更新任何记录
  2. 如果它有一个日期值,那么更新我在WHERE子句中指定的所有记录
  3. 问题一个!将我的查询中的所有日期字段设置为NULL,以用于WHERE子句中的记录.

这是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)

c# datetime sql-server-2008 sqlparameter

1
推荐指数
1
解决办法
2万
查看次数

DbNull.Value和DbNull.Value.ToString()之间的区别

我想了解哪种用法是正确的?

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)

c# dbnull sqlparameter

1
推荐指数
1
解决办法
1万
查看次数

从 C# 将参数传递到存储过程:将哪个 SQLDbType 用于 numeric(18, 0)

我在 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

1
推荐指数
1
解决办法
3190
查看次数