我正在ASP.NET网站上工作,偶然发现了一个问题。我一直在将ASP.NET论坛转换为ASP.NET 4.5。我已经修复了所有内容,并且该网站在我的本地开发机器上运行得很棒。一旦我将其上传到我的网络主机,我收到以下错误。
' /'中的服务器错误应用
指定的演员表无效。
我一直想弄清楚,我很难过。这是代码,SQL表和存储过程。
public static int GetWebIDAndFolder(string host, out string folder)
{
SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["CrzyForumConnectionString"].ConnectionString);
SqlCommand cmd = new SqlCommand("CWF_GetWebIDAndFolder", conn);
host = host.Replace("www.", "");
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@WebDomain", SqlDbType.NVarChar, 50);
cmd.Parameters.Add("@WebID", SqlDbType.Int, 4);
cmd.Parameters.Add("@Folder", SqlDbType.NVarChar, 50);
cmd.Parameters[0].Value = host;
cmd.Parameters[1].Direction = ParameterDirection.Output;
cmd.Parameters[2].Direction = ParameterDirection.Output;
conn.Open();
cmd.ExecuteNonQuery();
int webID = (int)cmd.Parameters[1].Value;
if (Convert.IsDBNull(cmd.Parameters[2].Value))
folder = string.Empty;
else
folder = (string)cmd.Parameters[2].Value;
conn.Close();
return webID;
}
SQL表:
CREATE TABLE [dbo].[CWF_Webs] (
[WebDomain] NVARCHAR (50) COLLATE Latin1_General_CI_AS NOT NULL,
[WebID] INT NOT NULL,
[Folder] NVARCHAR (50) COLLATE Latin1_General_CI_AS NULL
);
存储过程
CREATE PROCEDURE [indie_world].CWF_GetWebIDAndFolder
(
@WebDomain nvarchar(50),
@WebID int OUTPUT,
@Folder nvarchar(50) OUTPUT
)
AS
SELECT @WebID = (SELECT WebID FROM CWF_Webs WHERE WebDomain = @WebDomain)
SELECT @Folder = (SELECT Folder FROM CWF_Webs WHERE WebDomain = @WebDomain)
任何和所有帮助将不胜感激。代码,表和过程全部来自项目来自以下URL。 http://www.codeproject.com/Articles/4291/Riverside-Internet-Forums。它是应用程序im转换为基础的简单论坛并开始扩展它。
答案 0 :(得分:0)
我现在看到params输出了,我看到你将SELECTING
值放入参数中。每当我使用OUTPUT参数也有一个RESULTSET(即SELECT语句)时,我必须先关闭阅读器。
您是否尝试过以下其中一项?
更改SPROC:
SET @WebID = (SELECT WebID FROM CWF_Webs WHERE WebDomain = @WebDomain)
SET @Folder = (SELECT Folder FROM CWF_Webs WHERE WebDomain = @WebDomain)
或者不要更改SQL并使用DataReader,然后在完成Reading()后关闭它:
using( System.Data.Common.DbDataReader rdr = cmd.ExecuteReader() )
{
while(rdr.Read())
{
}
}
int webID = (int)cmd.Parameters[1].Value;
答案 1 :(得分:0)
我会更改使用键而不是索引
的参数分配cmd.Parameters["@WebDomain"].Value = host;
cmd.Parameters["@WebID"].Direction = ParameterDirection.Output;
cmd.Parameters["@Folder"].Direction = ParameterDirection.Output;
并使用键获取值
int webID = cmd.Parameters["@WebID"].Value as int;
if(webID==0){
// something is wrong with your query
}
答案 2 :(得分:0)
经过一天的捣乱之后,我想出来了。谢谢你们所有的精彩反馈。问题是数据库表中的主机。我已经添加了http://它只是在寻找url.com而不是http://url.com。