C#:考虑数据类型长度规范

用户名

我将以下代码作为数据访问层的一部分。

    #region Update ConnectionType
    public void UpdateConnectionType(string lastUpdatedBy, string connectionTypeDesc, int connectionTypeID, bool isDisabled)
    {
        var sqlStatement = new StringBuilder();
        sqlStatement.Append(" UPDATE dbo.ConnectionType");
        sqlStatement.Append("   SET");
        sqlStatement.Append(" LastUpdatedBy = @LastUpdatedBy, ");
        sqlStatement.Append(" ConnectionTypeDesc = @ConnectionTypeDesc,");
        sqlStatement.Append(" IsDisabled = @IsDisabled, ");
        sqlStatement.Append(" LastUpdatedDate = GetDate() ");
        sqlStatement.Append(" WHERE ");
        sqlStatement.Append("   ConnectionTypeID = @ConnectionTypeID");

        SqlCommand sqlCommand = new SqlCommand(sqlStatement.ToString());

        sqlCommand.Parameters.Add("@ConnectionTypeID", SqlDbType.Int);
        sqlCommand.Parameters["@ConnectionTypeID"].Value = connectionTypeID;

        sqlCommand.Parameters.Add("@IsDisabled", SqlDbType.Bit);
        sqlCommand.Parameters["@IsDisabled"].Value = isDisabled;

        sqlCommand.Parameters.Add("@LastUpdatedBy", SqlDbType.VarChar);
        sqlCommand.Parameters["@LastUpdatedBy"].Value = lastUpdatedBy;

        sqlCommand.Parameters.Add("@ConnectionTypeDesc", SqlDbType.VarChar);
        sqlCommand.Parameters["@ConnectionTypeDesc"].Value = connectionTypeDesc;

        DBAccess.SQLServer.ExecuteNonQuery(DBAccess.SQLServer.GetConnectionString("AccountTracker"), sqlCommand);
    }
    #endregion

上面的代码指向一个数据库,其中的数据类型ConnectionTypeDescvarchar(100).的,现在由于我只表明它是varchar类型。

我的问题是:我应该如何解释数据类型规范的差异?

  • 我应该使用下面的示例代码创建一个对象类吗?

        // SQL parameter collection
        var sqlParams = new List<SqlParameter>();
    
        sqlParams.Add(new SqlParameter() { ParameterName = "@Client_Code", SqlDbType = SqlDbType.VarChar, Size = 9, Value = clientCode });
    
        // Create sql command
        var sqlCmd = new SqlCommand(sqlStatement.ToString());
    
        // Add sql parameters to sql command
        sqlCmd.Parameters.AddRange(sqlParams.ToArray());
    
        // Execute sql
        DBAccess.SQLServer.ExecuteNonQuery(DBAccess.SQLServer.GetConnectionString("JutfDB"), sqlCmd);
    
史蒂夫

如果您知道varchar字段的大小,则在构建参数时始终指定该大小

sqlCommand.Parameters.Add("@ConnectionTypeDesc", SqlDbType.VarChar, 100);
sqlCommand.Parameters["@ConnectionTypeDesc"].Value = connectionTypeDesc;

这对查询的性能有重要影响,尤其是对于connectionTypeDesc不同的字符串长度,使用不同的值重复查询时

如果再次调用相同的查询,但只有正确指定了varchar列的大小,Sql Server中的查询优化器才能缓存您的查询计划并重用它。

您可以在本文中阅读有关此问题的更多信息。
数据访问代码如何影响数据库性能

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章