请教一下各位大侠我的程序哪里错了 谢谢了

zjc308882936 2010-07-02 11:35:14
关于自定义表单,我的思路是记录创建表单的项然后通过SQL过程创建数据表可是老是提示类型异常请各位帮忙看下到底哪里错了,谢谢

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
-- =============================================
-- 根据要求创建表单
-- =============================================
ALTER PROCEDURE [dbo].[CreateTables]
@tablename nvarchar(100), --表名
@str nvarchar(1000) --字段
AS
declare @sql nvarchar(1100)
set @sql=''
BEGIN
set @sql='create table'+' '+@tablename+'('+@str+')'+';'
print @sql
execute (@sql)
--create table @tablename (@str)
END




asp.net调用如下

/// <summary>
/// connect 为连接字符串
/// process 为过程名
/// Sda为 SQL数据适配器
/// </summary>
SqlConnection connect;
SqlCommand process;
SqlDataAdapter Sda;
private string connectionString = ConfigurationManager.ConnectionStrings["oasysConnectionString"].ConnectionString;
public WorkFlow()
{
connect = new SqlConnection(connectionString);
this.process = connect.CreateCommand();
Sda = new SqlDataAdapter(this.process);
}

public void CreateTables(string names, string strs)
{
connect.Open();
process = new SqlCommand("CreateTables", connect);
process.CommandType = CommandType.StoredProcedure;
SqlParameter tablename = new SqlParameter("@tablename", SqlDbType.NVarChar, 100);
tablename.Value = names;
process.Parameters.Add(tablename);
SqlParameter str = new SqlParameter("@str", SqlDbType.NVarChar, 1000);
str.Value = strs;
process.Parameters.Add(str);
runprocess();
}
private void runprocess()
{
try
{
process.ExecuteNonQuery();
}
catch (Exception ex)
{
ex = new Exception("操作失败!");

throw ex;
}
finally
{
connect.Close();
}
}





页面文件



WorkFlow.WorkFlow WorkFlow = new WorkFlow.WorkFlow();
static string str = "";
static string route = "";
protected void Page_Load(object sender, EventArgs e)
{
//UpdatePanel1.Visible = true;
//UpdatePanel2.Visible = false;
//UpdatePanel3.Visible = false;
//if (!Page.IsPostBack)
//{

//}
}
protected void Button1_Click(object sender, EventArgs e)
{

try
{
WorkFlow.CreateWorkFlowTable(TextBox1.Text, "id", "int", "0", "IDENTITY(1,1) NOT NULL PRIMARY KEY", TextBox2.Text);
pClass.MessageBoxShow("创建表成功", "", Page);
str = TextBox1.Text + " " + "id" + " " + "int" + " " + "" + "IDENTITY(1,1) NOT NULL PRIMARY KEY"; //str记录创建表单的字段参数
UpdatePanel1.Visible = false;
UpdatePanel2.Visible = true;
UpdatePanel3.Visible = false;

tablenames.Text = TextBox1.Text;

}
catch
{
pClass.MessageBoxShow("创建表失败", "", Page);
}
}
protected void Button2_Click(object sender, EventArgs e)
{
try
{
WorkFlow.CreateWorkFlowTable(tablenames.Text, TextBox3.Text, TextBox4.Text, TextBox5.Text, TextBox6.Text,TextBox7.Text);
pClass.MessageBoxShow("创建字段成功", "", Page);
str += "," + tablenames.Text + " " + TextBox3.Text + " " + TextBox4.Text + "(" + TextBox5.Text+")"+ " " + TextBox6.Text + " " + TextBox7.Text;

GridView1.DataBind();
TextBox7.Text = "";
TextBox6.Text = "";
TextBox5.Text = "";
TextBox4.Text = "";
TextBox3.Text = "";
//待定
}
catch
{
pClass.MessageBoxShow("创建字段失败", "", Page);
}
}
protected void Button3_Click(object sender, EventArgs e)
{
UpdatePanel1.Visible = false;
UpdatePanel2.Visible = false;
UpdatePanel3.Visible = true;
}
protected void Button4_Click(object sender, EventArgs e)
{
GridView3.DataBind();
}
protected void LinkButton1_Click(object sender, EventArgs e)
{
Label Label1 = (Label)GridView3.FindControl("Label1");
TextBox TextBox8 = (TextBox)UpdatePanel3.FindControl("TextBox8");
TextBox8.Text = Label1.Text;
}
protected void Button5_Click(object sender, EventArgs e)
{
route += TextBox8.Text + "-";
str += "," + tablenames.Text + " " + TextBox8.Text + "sh" + " " + "nvarchar(200)" + " ";
WorkFlow.CreateWorkFlowTable(tablenames.Text, TextBox8.Text + "sh", "nvarchar(200)", "200", "", "");
TextBox8.Text = "";
TextBox9.Text = "";
//pClass.MessageBoxShow("节点输入成功", "");
routelabel.Text = route;

UpdatePanel3.DataBind();
}
protected void Button6_Click(object sender, EventArgs e)
{
//route += "'";
str += "," + "route" + " " + "nvarchar(500)" + " " + "default " + route;//记录流程节点
str += "," + "currents" + " " + "nvarchar(500)";//记录到哪里了
//str+=","+"
///daixu!!!!!!!!!!!!!!!!!!!!!!!!
}
protected void Button7_Click(object sender, EventArgs e)
{
try
{
WorkFlow.CreateTables(tablenames.Text, str);
pClass.MessageBoxShow("创建成功", "", Page);
}
catch
{


}
}

敢问我错在哪里了 谢谢
...全文
339 33 打赏 收藏 转发到动态 举报
写回复
用AI写文章
33 条回复
切换为时间正序
请发表友善的回复…
发表回复
air_raid 2012-05-02
  • 打赏
  • 举报
回复
SqlConnection con = new SqlConnection("Data Source=localhost;Initial Catalog=RemoteEducation;User ID=sa;Password=123456;Persist Security Info = true");
con.Open();
SqlCommand cmd = new SqlCommand("select * from Task",con); //
cmd.CommandType = CommandType.Text;
cmd.ExecuteNonQuery();
这样不用存储过程,直接用"select * from Task"测试了下,还是报同样的错误,各位帮帮额啊~
dacheng 2011-05-14
  • 打赏
  • 举报
回复
我今天也遇到了一个问题,仔细看一下,原来是字符串长度不够,现在已解决了!
zjc308882936 2010-07-05
  • 打赏
  • 举报
回复
大侠们谁能告诉我“ Message = "无法将类型为“System.Data.SqlClient.SqlInternalConnectionTds”的对象强制转换为类型“System.Data.SqlClient.SqlInternalConnectionSmi”。"
SqlValue = {[id] int IDENTITY(1,1) NOT NULL PRIMARY KEY,[name] nvarchar(20) ,[2sh] nvarchar(200) ,[3sh] nvarchar(200) ,[4sh] nvarchar(200) ,[route] nvarchar(500) DEFAULT '2-3-4-',[currents] nvarchar(500)}”到底是啥错误咋样才能改正过来呢 谢谢了
天府荣城 2010-07-02
  • 打赏
  • 举报
回复
我有点明白了,你的表变量的类型错误,应该是数据库的表类型,而不是varchar或者nvarchar,
解决方法就是把表变量(@tablename)的类型转换好就行了。
wuyq11 2010-07-02
  • 打赏
  • 举报
回复
在查询分析中调试存储过程
wuyq11 2010-07-02
  • 打赏
  • 举报
回复
IF NOT EXISTS ( SELECT * FROM sysobjects
WHERE id = object_id(N '[dbo].[ '+ @TableName + '] ') and OBJECTPROPERTY(id, N 'IsUserTable ') = 1)
EXECUTE( 'CREATE TABLE '+ @TableName + '(
NAME NVARCHATR(100) not null,
ID not null,
) ')
zjc308882936 2010-07-02
  • 打赏
  • 举报
回复
USE [oasys]
GO

DECLARE @return_value int

EXEC @return_value = [dbo].[CreateTables]
@tablename = N'tb8',
@str = N'id int IDENTITY(1,1) NOT NULL PRIMARY KEY,name int,sh2 nvarchar(200),sh3 nvarchar(200),sh4 nvarchar(200),route nvarchar(500) DEFAULT '-2-3-4',currents nvarchar(500)'

SELECT 'Return Value' = @return_value

GO
TATA-ZhuJun 2010-07-02
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 zyl_leilei 的回复:]
类型异常,是哪里异常了,把报错的地方指出来。。
[/Quote]

哪里都有你的脚步啊.....
aluogang 2010-07-02
  • 打赏
  • 举报
回复
你把你完整的sql执行脚本贴出来看看
zjc308882936 2010-07-02
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 aluogang 的回复:]
引用 13 楼 zjc308882936 的回复:
引用 9 楼 symbol_bc 的回复:
列名怎么都有空格啊,tb8 id,tb8 name...
这是什么东西


可是还是不行 create table tb8 (id int IDENTITY(1,1) NOT NULL PRIMARY KEY,name int ,2sh nvarchar(200) ,3sh nvarchar……
[/Quote]


'id int IDENTITY(1,1) NOT NULL PRIMARY KEY,name int,sh2 nvarchar(200),sh3 nvarchar(200),sh4 nvarchar(200),route nvarchar(500) DEFAULT '-2-3-4',currents nvarchar(500)'我把这个串改成了这样可是却提示我-附近错误 我是实在没看出来哪里错了 还望大家指教啊 疯了这几天咋就这么不在状态
aluogang 2010-07-02
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 zjc308882936 的回复:]
引用 9 楼 symbol_bc 的回复:
列名怎么都有空格啊,tb8 id,tb8 name...
这是什么东西


可是还是不行 create table tb8 (id int IDENTITY(1,1) NOT NULL PRIMARY KEY,name int ,2sh nvarchar(200) ,3sh nvarchar(200) ,4sh nvarchar(200) ,r……
[/Quote]
语句就有问题,你先把这条语句改能正确的,然后再相对应去程序里面改,应该就没问题了
沈勇 2010-07-02
  • 打赏
  • 举报
回复
路过,学习中
zjc308882936 2010-07-02
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 symbol_bc 的回复:]
列名怎么都有空格啊,tb8 id,tb8 name...
这是什么东西
[/Quote]

可是还是不行 create table tb8 (id int IDENTITY(1,1) NOT NULL PRIMARY KEY,name int ,2sh nvarchar(200) ,3sh nvarchar(200) ,4sh nvarchar(200) ,route nvarchar(500) default 2-3-4-,currents nvarchar(500));
消息 102,级别 15,状态 1,第 1 行
'2' 附近有语法错误。

(1 行受影响)
zjc308882936 2010-07-02
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 symbol_bc 的回复:]
列名怎么都有空格啊,tb8 id,tb8 name...
这是什么东西
[/Quote]

明白了 我去改改 谢谢
zjc308882936 2010-07-02
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 aluogang 的回复:]
tb8 id int IDENTITY(1,1) NOT NULL PRIMARY KEY,tb8 name int() ,tb8 2sh nvarchar(200) ,tb8 3sh nvarchar(200) ,tb8 4sh nvarchar(200) ,route nvarchar(500) default 2-3-4-,currents nvarchar(500)
你这段在数据库中执行……
[/Quote]


create table tb8 (tb8 id int IDENTITY(1,1) NOT NULL PRIMARY KEY,tb8 name int() ,tb8 2sh nvarchar(200) ,tb8 3sh nvarchar(200) ,tb8 4sh nvarchar(200) ,route nvarchar(500) default 2-3-4-,currents nvarchar(500));
消息 102,级别 15,状态 1,第 1 行
'int' 附近有语法错误。

(1 行受影响)
aluogang 2010-07-02
  • 打赏
  • 举报
回复
tb8 id int IDENTITY(1,1) NOT NULL PRIMARY KEY,tb8 name int() ,tb8 2sh nvarchar(200) ,tb8 3sh nvarchar(200) ,tb8 4sh nvarchar(200) ,route nvarchar(500) default 2-3-4-,currents nvarchar(500)
你这段在数据库中执行能否通过?
symbol_bc 2010-07-02
  • 打赏
  • 举报
回复
列名怎么都有空格啊,tb8 id,tb8 name...
这是什么东西
zjc308882936 2010-07-02
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 zyl_leilei 的回复:]
类型异常,是哪里异常了,把报错的地方指出来。。
[/Quote]


process.ExecuteNonQuery(); 这个异常
zjc308882936 2010-07-02
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 symbol_bc 的回复:]
SQL code

--建表应该给字段一个数据类型
alter PROCEDURE [dbo].[CreateTables]
@tablename nvarchar(100), --表名
@str nvarchar(1000) --字段
AS
declare @sql nvarchar(1100)
set @sql=''
BEGIN
set @sql='create tab……
[/Quote]

可是我的字段参数是通过调用的时候传进来的 例如SqlValue = {tb8 id int IDENTITY(1,1) NOT NULL PRIMARY KEY,tb8 name int() ,tb8 2sh nvarchar(200) ,tb8 3sh nvarchar(200) ,tb8 4sh nvarchar(200) ,route nvarchar(500) default 2-3-4-,currents nvarchar(500)}
zjc308882936 2010-07-02
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 aluogang 的回复:]
什么错误?
[/Quote]

“process.EventSink”引发了“System.InvalidCastException”类型的异常


Message = "无法将类型为“System.Data.SqlClient.SqlInternalConnectionTds”的对象强制转换为类型“System.Data.SqlClient.SqlInternalConnectionSmi”。"

Message = "无法将类型为“System.Data.SqlClient.SqlInternalConnectionTds”的对象强制转换为类型“System.Data.SqlClient.SqlInternalConnectionSmi”。"


是在调用过程的时候触发的异常
加载更多回复(13)

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧