好吧我最初开始使用Convert.ToInt32(myradTextBox.Text),然后它说指定的强制转换是无效的。我在这里做了一些研究,并决定尝试Int.TryParse。这样做我仍然收到此错误。我想要做的是当用户输入一个ID并点击创建按钮时,它会搜索数据库以查看该ID是否已存在。我还尝试将我的Int.TryParse中的bool值转换为int,使用Convert.ToInt32(Result)仍然是相同的错误(请参阅下面的第三个代码帖子中的发布位置)。也许它与我的比较方法有关。
下面我为Int.TryParse方法提供了值。我正在调用以检查userinput的方法不在当前的db和我正在捕获该语句的if语句中。任何关于如何解决这个问题的意见将不胜感激。我对大多数这些东西还是新手,所以如果遗漏任何关键信息我会道歉。只要问一下你是否需要澄清或详细说明。
这是我的比较方法:
public bool isValidID(int id)
{
SqlConnection dbConn = null;
int count = 0;
try
{
using (dbConn = new SqlConnection(Properties.Settings.Default["tville"].ToString()))
{
string sql = "SELECT Count(*) FROM PackLabelFormat where PackFormatID = @PackFormatID";
SqlCommand cmd = dbConn.CreateCommand();
cmd.CommandText = sql;
cmd.Parameters.AddWithValue("@PackFormatID", id);
dbConn.Open();
using (SqlDataReader reader = cmd.ExecuteReader())
{
reader.Read();
count = reader.GetInt16(0);
}
}
}
catch (Exception ex)
{
throw ex;
}
if (count > 0)
return false;
return true;
}
这是我在Int.TryParse方法中使用的变量:
string IDselect = rTxtBoxFormatID.Text.ToString();
int resultInt;
bool result = int.TryParse(IDselect, out resultInt);
最后,我的方法是捕获错误:
SqlConnection dbConn = null;
LabelData labelList = new LabelData();
try
{
using (dbConn = new SqlConnection(Properties.Settings.Default["tville"].ToString()))
{
if (SelectedVersion.isValidID(resultInt))
{
SelectedVersion.PackFormatID = resultInt;
}
else
{
MessageBox.Show("ID already in use!", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
catch (Exception ex)
{
throw ex;
}
答案 0 :(得分:1)
数据库列不支持Int16 aka short。这就是为什么我指定的演员表无效的错误,无论我尝试过什么,都不会消失。感谢您对此事的帮助!以下是进一步说明问题所在的代码。
using (SqlDataReader reader = cmd.ExecuteReader())
{
reader.Read();
//count = reader.GetInt16(0); needs to be reader.GetInt32(0);
}