C# int不包含接受1个参数的构造函数

C# int不包含接受1个参数的构造函数,c#,int,C#,Int,嘿,伙计们,这个虫子已经困扰了我4个小时了,我试过的东西都不管用 SqlParameter id = new SqlParameter("@bookId",System.Data.SqlDbType.Int.ToString()); id.Direction = System.Data.ParameterDirection.Output; cmd.Parameters.Add(id); cmd.ExecuteNonQuery(); book.BookId = new int(id.Va

嘿,伙计们,这个虫子已经困扰了我4个小时了,我试过的东西都不管用

 SqlParameter id = new SqlParameter("@bookId",System.Data.SqlDbType.Int.ToString());
 id.Direction = System.Data.ParameterDirection.Output;
 cmd.Parameters.Add(id);
 cmd.ExecuteNonQuery();
 book.BookId = new int(id.Value.ToString()); // <------ERROR
也许是这个

book.BookId = Int32.Parse(id.Value.ToString());
试试这个

 book.BookId = Convert.ToInt32(id.Value);

这句话看起来不正确

SqlParameter id = new SqlParameter("@bookId",System.Data.SqlDbType.Int.ToString());
我想你应该把它改成Int或String

SqlParameter id = new SqlParameter("@bookId",System.Data.SqlDbType.Int);
只要改变你的陈述

 book.BookId = Convert.ToInt32(id.Value.ToString()); 

如果100%确定字符串包含整数,并且可以抛出异常,则可以执行以下操作:

string id = "55";
int x = Int32.Parse(id);
否则,您可以管理字符串不是整数的情况:

        string id = "55";
        int x = 0;
        if(!Int32.TryParse(id, out x))
        {
            //Manage the special case here where id is not a int
        }

您必须尝试以下任一方法:

book.BookId = Int32.Parse(id.Value.ToString());


在我看来,您使用ToString()的次数太多了。试试这个:

SqlParameter id = new SqlParameter("@bookId", System.Data.SqlDbType.Int);
id.Direction = System.Data.ParameterDirection.Output;
cmd.Parameters.Add(id);
cmd.ExecuteNonQuery();
Int32.TryParse(id.Value.ToString(),out book.BookId);

由于到目前为止,没有任何答案真正解释了您的错误所在-发生这种情况是因为您试图调用
int
的构造函数并传递参数,没有任何
int
构造函数接受字符串参数(或任何其他类型)


有几种方法可以将字符串转换为整数,但最可靠的方法(as)是使用
Int32.TryParse

必须检查以确保id.Value不为空。确定后,此操作应能正常工作:

book.BookId = Convert.ToInt32(id.Value);
甚至

book.BookId = (int) id.Value;
编辑



如果
Int32.Parse()
引发格式异常,则必须为其指定非整数的内容。你说你确信它不是空的,那么它是什么呢?

你能提供错误吗?我只是把它添加到问题中,不知道你想实现什么,但你不需要在最后一行做以下操作:book.Bookid=Convert.ToInt32(id)?假设book.BookId是一个int?.System.Data.SqlDbType.int.ToString()???.ToString我修复了它。我怀疑
id.Value
是一个装箱的
int
int?
,这可能提供了一种更直接的方法来获取值。在捕获get:FORMAT异常之前尝试了这个方法:输入字符串的格式不正确。然后。。。数据库中的bookId条目不包含可转换为整数的字符串。您应该将您的值打印到输出中,并查看它所说的内容捕获到有效的强制转换例外:无法将类型为“System.Data.SqlClient.SqlParameter”的对象强制转换为类型为“System.IConvertible”。嗯,我已将System.Data.sqldbtype.int.tostring()删除为System.Data.sqldbtype.int选中的数据库。现在要修复此错误的转换。这本书仍然有错误。bookId!!!!它不能为空,它在数据库中自动递增。我使用的是另一个存储过程,它正在工作。但是现在我正在使用一个Transaction,它现在有一个确切的代码,它说:指定的强制转换无效您是对的SqlDbType.Int与Int完全不同,因此不能直接强制转换。更改了我的代码。wonko那么你是如何修复你的代码或编辑你的代码的?我更改了最后一行以将SqlDbType.Int解析为字符串。给我们一点时间会让你知道ok id.value.Tostring返回格式异常和id.value返回对象不能从db NUll转换为其他类型。这意味着返回id值为NUll。检查您的存储过程并确保它返回一些值。感谢您引用我;-)
SqlParameter id = new SqlParameter("@bookId", System.Data.SqlDbType.Int);
id.Direction = System.Data.ParameterDirection.Output;
cmd.Parameters.Add(id);
cmd.ExecuteNonQuery();
Int32.TryParse(id.Value.ToString(),out book.BookId);
book.BookId = Convert.ToInt32(id.Value);
book.BookId = (int) id.Value;