只是尝试将一些简单的数据插入到表中,但每次尝试时我都会得到错误"无法在int"上调用方法。这是我的代码,感谢表中的任何帮助数据类型是影院Id的int和ReviewText的nvarchar(50)
protected void BtnSubmitReview_Click(object sender, EventArgs e)
{
try
{
System.Data.SqlClient.SqlConnection sqlConnection1 = new System.Data.SqlClient.SqlConnection("RegistrationConnectionString");
System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand();
cmd.CommandType = System.Data.CommandType.Text;
cmd.CommandText = "INSERT INTO ReviewText (ReviewText.CinemaID, ReviewText.ReviewText) VALUES (1, 'NorthWestern')";
cmd.Connection = sqlConnection1;
sqlConnection1.Open();
cmd.ExecuteNonQuery();
sqlConnection1.Close();
Response.Write("Your Review was saved");
}
catch (Exception ex)
{
Response.Write("Error" + ex.ToString());
}
错误显示:
无法在int上调用方法。
描述:
执行当前期间发生了未处理的异常 网络请求。请查看堆栈跟踪以获取更多信息 错误以及它在代码中的起源。
异常详细信息:
System.Data.SqlClient.SqlException:无法在int上调用方法。
来源错误:
执行期间生成了未处理的异常 当前的网络请求。有关的来源和位置的信息 可以使用下面的异常堆栈跟踪来识别异常。
堆栈追踪:
[SqlException(0x80131904):无法调用int上的方法。]
System.Data.SqlClient.SqlConnection.OnError(SqlException异常, Boolean breakConnection,Action1 wrapCloseInAction) +1767866
1 wrapCloseInAction) +5352418 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj,Boolean callerHasConnectionLock,Boolean asyncClose)+244
System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action
System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler,SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler,TdsParserStateObject stateObj,布尔& dataReady)+1691
System.Data.SqlClient.SqlDataReader.TryConsumeMetaData()+61
System.Data.SqlClient.SqlDataReader.get_MetaData()+90
System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior,String resetOptionsString)+365
System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(的CommandBehavior cmdBehavior,RunBehavior runBehavior,Boolean returnStream,Boolean async,Int32超时,任务& task,Boolean asyncWrite,SqlDataReader ds)+1406
System.Data.SqlClient.SqlCommand.RunExecuteReader(的CommandBehavior cmdBehavior,RunBehavior runBehavior,Boolean returnStream,String 方法,TaskCompletionSource`1完成,Int32超时,任务&任务, Boolean asyncWrite)+177
System.Data.SqlClient.SqlCommand.RunExecuteReader(的CommandBehavior cmdBehavior,RunBehavior runBehavior,Boolean returnStream,String 方法)+53
System.Data.SqlClient.SqlCommand.ExecuteReader(的CommandBehavior 行为,字符串方法)+134
System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(的CommandBehavior 行为)+41
System.Data.Common.DbCommand.System.Data.IDbCommand.ExecuteReader(的CommandBehavior 行为)+10 System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset,DataTable [] datatables,Int32 startRecord,Int32 maxRecords, String srcTable,IDbCommand命令,CommandBehavior行为)+140
System.Data.Common.DbDataAdapter.Fill(DataSet dataSet,Int32 startRecord,Int32 maxRecords,String srcTable,IDbCommand命令, CommandBehavior行为)+316
答案 0 :(得分:0)
您不需要使用表名限定INSERT
语句中的列名。将其用作SQL:
INSERT INTO ReviewText (CinemaID, ReviewText) VALUES (1, 'NorthWestern')
此外,如果要在application / web.config中查找连接字符串,则不能只将密钥放在SqlConnection
构造函数中以获取实际的连接字符串。您必须使用ConfigurationManager
类来获取值,这看起来像这样:
var conn = new SqlConnection(ConfigurationManager.ConnectionStrings["RegistrationConnectionString"].ConnectionString);
答案 1 :(得分:-2)
您的代码有问题,我不知道此问题是否是您的例外的根源,请先将其编辑为此,然后告诉我们结果:
//you dont need to repeat table name in insert command's columns
cmd.CommandText = "INSERT INTO ReviewText (CinemaID, ReviewText) VALUES (1, 'NorthWestern')";
强烈建议通过这种方式使用SqlConnection:
using(System.Data.SqlClient.SqlConnection sqlConnection1 = new System.Data.SqlClient.SqlConnection("RegistrationConnectionString"))
{
System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand();
cmd.CommandType = System.Data.CommandType.Text;
cmd.CommandText = "INSERT INTO ReviewText (CinemaID, ReviewText) VALUES (1, 'NorthWestern')";
cmd.Connection = sqlConnection1;
sqlConnection1.Open();
cmd.ExecuteNonQuery();
sqlConnection1.Close();
}