小编Pet*_*ter的帖子

条件堆栈分配

我有一个方法,将指针T带到有效的内存块.在该方法中,由于已知常量some​​_defined常量很小,因此不会产生堆栈溢出,因此以下是明智的吗?

if (T)
{
    p = T;
    q = T + k;
}
else
{
    unsigned long long TT[2 * some_defined constant];
    p = TT;
    q = TT + k;
}

<code using p and q>
Run Code Online (Sandbox Code Playgroud)

除非我知道该方法被同时调用,否则我绝不会考虑这样做; 它被调用五次,每次调用都在一个单独的线程上.进行此类调用的方法使用OMP循环.如果调用OMP循环的调用方法是为了满足所需的额外内存并在T中预先分配,则需要从调用者请求分配10*some_defined常量字,如果在OMP循环中调用的方法分配2*some_defined常量然后才能很好地工作.如果有可能出现堆栈溢出的风险,那么可以在堆上分配10*some_defined常量字后调用top方法,这样做很有条件.

c

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

SQLDataReader无法引发异常

下面的函数旨在确定查询是否将返回任何行。在SQL中传递的是查询。如果导致错误,则函数应返回false。但是,当SQL =

SELECT TOP 1 [AU_ID] 
       FROM [dat].[model_80av2_v1_2941] 
       WHERE [AU_ID] IS NOT NULL AND convert(int, [AU_ID]) <> [AU_ID]
Run Code Online (Sandbox Code Playgroud)

由于未检测到错误,因此该函数错误地返回true。但是,在SQL Management Studio中执行相同的查询会导致错误:

消息232,级别16,状态3,行3类型int的算术溢出错误,值= -1000000000000000000000000000000000000.000000。

显然,该函数应该返回false,因为值不在int数据范围内,但错误处理未检测到错误。为什么?从其他帖子中,我的理解是SqlDataReader reader = cmd.ExecuteReader()应该导致错误。

private bool GetIfExists(string SQL, out int ErrorNumber, out bool Exists)
{
    bool IsSuccess = true;
    ErrorNumber = 0;
    Exists = false;

    try
    {
        using (SqlConnection cnn = new SqlConnection(_connectionString))
        {
            try
            {
                cnn.Open();

                using (SqlCommand cmd = cnn.CreateCommand())
                {
                    cmd.CommandText = SQL;
                    cmd.CommandTimeout = _commandTimeout;
                    try
                    {
                        using (SqlDataReader reader = …
Run Code Online (Sandbox Code Playgroud)

.net c# sql-server sqldatareader

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

标签 统计

.net ×1

c ×1

c# ×1

sql-server ×1

sqldatareader ×1