Tag: sqlparameters

如何在整数数据类型变量中将sql参数作为空值传递?

如何将sql参数作为空值传递给整数数据类型变量? StockBO sBO = new StockBO(); sBO.Mode = 2; if (ddcmpanyname.SelectedIndex != 0) { sBO.Client_id = Convert.ToInt16(ddcmpanyname.SelectedValue); } else { sBO.Client_id = Convert.ToInt16(DBNull.Value);//Object cannot be cast from DBNull to other types. sBO.Client_id =DBNull.Value;//Cannot implicitly convert type } ds=_StockController.StockGet(sBO); 我改变了这样的代码它给出了错误,就像我的评论检查其他部分

将NULL值分配给SqlParameter的最佳方法

我在C#类方法中使用了许多可选的输入参数。 由于可选语法在未使用该参数时会创建值“0”,因此我在方法中调用的SQL插入命令会像这样插入。 但是,当不使用参数时,我需要命令插入NULL值而不是0。 在不使用大量“if”语句的情况下实现此目的的最佳方法是什么? 以下是我所指的代码。 是否有语法/某种命令允许我在SqlParameter声明中指定NULL值? public int batchInsert ( int id, int outcome, int input = 0, int add = 0, int update = 0, int delete = 0, int errors = 0, int warnings = 0 ) { string sts; if (outcome == 0) { sts = “S”; } else if (outcome == […]

如何使用SQL参数从SQL Server获取数据集

我正在研究C#项目,我是这项技术的新手。 我想从SQL Server 2008中读取一些数据,然后编写以下代码 public User select(string username, string password) { string connection = ConfigurationManager.ConnectionStrings[“lawyersDBConnectionString”].ConnectionString.ToString(); string sql = string.Format(“select * from users where userName = ‘{0}’ and password = ‘{1}'”, username, password); SqlConnection con = new SqlConnection(); con.ConnectionString = connection; DataSet ds = new DataSet(); SqlDataAdapter da = new SqlDataAdapter(sql, con); User user = new […]

默认值设置为0的SqlParameter无法按预期工作

我做的是这样的: SqlParameter param = new SqlParameter(“@Param”, 0) { SqlDbType = SqlDbType.Int }; private void TestParam(SqlParameter param) { string test = param.Value.ToString(); // Getting NullReferenceException here } 但是,当我这样说时,我停止获取exception: SqlParameter param = new SqlParameter(“@Param”, SqlDbType.Int) { Value = 0 }; private void TestParam(SqlParameter param) { string test = param.Value.ToString(); // Everything OK } 任何人都可以告诉我为什么SqlParameter假设0与null相同? 编辑: MSDN在此解释: SqlParameter构造函数

参数中的动态where子句

我目前正在尝试构建SqlCommand的where子句。 类似的东西 myCommand.CommandText = “SELECT * ” + “FROM TABLE1 ” + “@whereClause”; //I build up the where clause with a StringBuilder myCommand.Parameters.AddWithValue(“@whereClause” theClause.ToString()); 但似乎这不可能。 我得到了例外: SqlException’@whereClause’附近的语法不正确 我想做这样的事情的原因是因为我想避免X调用数据库,这样我就把排序和过滤留给了服务器。 反正有没有做类似的事情? / edit:where子句看起来像这样的WHERE (TABLE1.COL1 = ‘the value’ OR TABLE1.COL1 = ‘another value’ OR TABLE1.COL1 = ‘this value’ … ) /编辑Finaly这是由于一个愚蠢的错字错误…我改为不使用参数化查询。 我会赞成那些帮助我的人的答案。 即使它没有修复我的(愚蠢的)错误,我也会标记为更接近修复我的情况的答案

如何防御性地编码以随机引用“表0”和空值?

我正在检索适量的数据并对其进行处理 – 没有什么独特之处。 一开始很奇怪的是,有了一些数据集,它运行良好,而且与其他人一起,我得到了以下错误信息: 这个错误的消息似乎是完全的混合(但无论如何都是误导性的),因为失败的集合没有比成功的集合更多的数据,因此不应该再运行“坏”数据比好。 或许,在这之后出现的另一个错误信息是: 注意:我得到这些冗长的错误对话框,而不是更简洁的东西,因为您可以在下面的代码的catch块中看到调试代码。 所以很明显它并不是真正的“太多数据”问题,正如最初的错误消息所示。 这也不是“缺失数据”问题,因为如果我查询2014年12月到2015年12月的数据(即将到来的月份没有数据),它运行正常 – 它只返回2015年12月的全部0; 所以它必须是“坏(不仅仅是缺失)数据”问题。 如何确定坏数据是什么,防御性地阻止它破坏应用程序的运行? 涉及上述错误消息的第601行包含以下代码: private void ReadData(string _unit, string monthBegin, string monthEnd, string beginYear, string endYear) { try { String dateBegin = UsageRptConstsAndUtils.GetYYYYMMDD(monthBegin, beginYear, true); String dateEnd = UsageRptConstsAndUtils.GetYYYYMMDD(monthEnd, endYear, false); DateTime dtBegin = UsageRptConstsAndUtils.DatifyYYYYMMDD(dateBegin); DateTime dtEnd = UsageRptConstsAndUtils.DatifyYYYYMMDD(dateEnd); DataTable dtUsage = SqlDBHelper.ExecuteDataSet(“sp_ViewProductUsage_MappingRS”, CommandType.StoredProcedure, new […]

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)); 要么 if(!string.IsNullOrEmpty(parentID)) cmd.Parameters.Add(new SqlParameter(“@ParentSesID”, parentID)); else cmd.Parameters.Add(new SqlParameter(“@ParentSesID”, DBNull.Value.ToString()));

SqlCommand参数大小混乱

我有以下代码行: sqlcommand.Parameters.Add(“@LinkID”, SqlDbType.Int, 4).Value = linkID; 但是,我对使用size感到有些困惑。 这是说它的4字节大小? 或者长度为4所以1234是可以接受的但是12345太大了?

是否可以使用SqlParameters获取SqlCommand的已解析文本?

我要做的是创建一些带参数的任意sql命令,设置参数的值和类型,然后返回解析的sql命令 – 包含参数。 我不会直接对sql数据库运行此命令,因此不需要连接。 因此,如果我运行下面的示例程序,我希望看到以下文本(或类似的东西): WITH SomeTable (SomeColumn) AS ( SELECT N’:)’ UNION ALL SELECT N’>:o’ UNION ALL SELECT N’^_^’ ) SELECT SomeColumn FROM SomeTable 示例程序是: 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’:)’ […]

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

我收到一个运行时错误,说”Must declare the table variable “@parmTableName” 。这意味着不允许在sql语句中将表名作为sql参数。 有没有比允许sql注入攻击更好的选择或建议? 我不想为sql语句” DELETE FROM ” + tableName + ” “做这个C#脚本; 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(); }