C# 代码在本地工作,但不在服务器中工作,与SQL和空字符串相关
你好,我有下面的cs代码C# 代码在本地工作,但不在服务器中工作,与SQL和空字符串相关,c#,sql-server,C#,Sql Server,你好,我有下面的cs代码 SqlConnection con = new SqlConnection(); SqlCommand com = new SqlCommand(); String comando = ""; con = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["INBIOTECAConnectionString"].To
SqlConnection con = new SqlConnection();
SqlCommand com = new SqlCommand();
String comando = "";
con = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["INBIOTECAConnectionString"].ToString());
SqlDataReader leer = null;
String diaUltimo = "";
String fecha = DateTime.Now.ToString("dd/MM/yyyy");
try
{
con.Open();
comando = " SELECT TOP 1 hora FROM SI_RegEntrada WHERE nombre = '" + name + "' and dia = '"+fecha+"' ORDER BY id DESC;";
com = new SqlCommand(comando, con);
leer = com.ExecuteReader();
while (leer.Read())
{
diaUltimo = leer[0].ToString();
}
if (diaUltimo.Equals(""))
{
return false;
}
else
{
return true;
}
}
catch (Exception ex)
{
return true;
}
finally
{
con.Close();
con.Dispose();
com.Dispose();
com = null;
con = null;
}
这应该很简单,它将检查SI_RegEntrada表(fecha)上是否有来自任何用户(名称)的条目
好的,到目前为止还不错,我继续阅读var diaUltimo上的结果
在我的本地服务器上,如果没有结果(这意味着该用户今天没有与系统交互),diaUltimo将获得
diaUltimo = ""
因此,我在if/else条件下检查返回值true或false。
在实时服务器中,它总是落在catch子句上,并且返回的总是true
我在想,也许diaUltimo会得到某种空值,或者一些sql错误
我无法调试或与live server交互。很有可能
con.Open()
引发异常。代码中没有其他问题 很有可能con.Open()
引发异常。代码中没有其他问题 首先,暂时将comando
的字符串内容替换为不依赖于表或行的SQL命令…类似于:
static string commando = "Select to_char(sysdate) from dual";
这将做两件事:它将测试您的连接对象和SQLExecute是否都按预期工作,并且它将测试live数据库中日期字段的默认格式掩码
如果您没有得到任何结果,那么我将开始诊断异常,方法是不返回
'true'
,而是引发内部异常并将ex
对象内容传递给您检查。首先,暂时将comando
的字符串内容替换为不依赖于表或行的SQL命令…类似于:
static string commando = "Select to_char(sysdate) from dual";
这将做两件事:它将测试您的连接对象和SQLExecute是否都按预期工作,并且它将测试live数据库中日期字段的默认格式掩码
如果您没有得到任何结果,那么我将开始诊断异常,方法是不返回'true'
,而是引发内部异常并将ex
对象内容传递给您检查。更改行
if (diaUltimo.Equals(""))
{
return false;
}
else
{
return true;
}
到
在检查您分配的值是否为null或空时,它将起双重作用更改行
if (diaUltimo.Equals(""))
{
return false;
}
else
{
return true;
}
到
在检查您分配的值是否为null或空时,它将起双重作用您确定它在if/else或catch中失败吗?如果用户没有任何交互,您的查询将返回null,而不是空字符串,如果这有助于在catch中,我尝试将catch的返回值更改为false,并且每次都会这样做,那么100%确定它会被捕获吗?那么什么是异常类型和消息?知道哪一行引发异常非常重要。即使您无法调试,但可以进行某种记录,以查找引发异常的行。可能连接失败了。你确定它在if/else或catch上失败了吗?如果用户没有进行任何交互,你的查询将返回NULL,而不是空字符串,如果这有助于在catch中,我尝试将catch的返回更改为false,它每次都这样做,那么100%确定它会被捕获吗?那么什么是异常类型和消息?知道哪一行引发异常非常重要。即使您无法调试,但可以进行某种记录,以查找引发异常的行。可能是连接失败了。我一直在想类似的事情,即使在我的本地服务器上,它工作得很好,因为现在我要尝试一些我没有想到的更简单的东西:if(leer.HasRows){return true;}else{return false;}就像我说的@ErickReyes,您的SQL返回NULL不是空字符串,NULL!=包括NULL的任何内容。+1 Travis。我一直在想类似的事情,即使在我的本地服务器上,它工作得很好,因为现在我要尝试一些我没有想到的更简单的东西:if(leer.HasRows){return true;}否则{return false;}就像我说的@ErickReyes一样,您的SQL返回NULL不是空字符串,NULL!=包括NULL在内的任何内容。+1 Travis。