|
Johe07的VS2005~VB.Net问题集 - 不能加入parameter进query (#38楼)
[复制链接]
|
|
楼主 |
发表于 3-4-2006 03:46 PM
|
显示全部楼层
它在messagebox那里出现了这个error
"Dynamic SQL generation is not supported against multiple base tables."
是我的design有问题了?
以下是它message的detail....
System.InvalidOperationException was unhandled
Message="Dynamic SQL generation is not supported against multiple base tables."
Source="System.Data"
StackTrace:
at System.Data.Common.DbCommandBuilder.BuildInformation(DataTable schemaTable)
at System.Data.Common.DbCommandBuilder.BuildCache(Boolean closeConnection, DataRow dataRow, Boolean useColumnsForParameterNames)
at System.Data.SqlClient.SqlCommandBuilder.GetUpdateCommand()
at MPLS.frmMPL.frmMPL_Load(Object sender, EventArgs e) in C:\IT X-Files\JK System\Store\MPLS-N\MPLS-N\frmMPL.vb:line 143
at System.Windows.Forms.Form.OnLoad(EventArgs e)
at System.Windows.Forms.Form.OnCreateControl()
at System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
at System.Windows.Forms.Control.CreateControl()
at System.Windows.Forms.Control.WmShowWindow(Message& m)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ScrollableControl.WndProc(Message& m)
at System.Windows.Forms.ContainerControl.WndProc(Message& m)
at System.Windows.Forms.Form.WmShowWindow(Message& m)
at System.Windows.Forms.Form.WndProc(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
at System.Windows.Forms.SafeNativeMethods.ShowWindow(HandleRef hWnd, Int32 nCmdShow)
at System.Windows.Forms.Control.SetVisibleCore(Boolean value)
at System.Windows.Forms.Form.SetVisibleCore(Boolean value)
at System.Windows.Forms.Control.Show()
at MPLS.frmLnSele.cmdOK_Click(Object sender, EventArgs e) in C:\IT X-Files\JK System\Store\MPLS-N\MPLS-N\frmSele.vb:line 287
at System.Windows.Forms.Control.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ButtonBase.WndProc(Message& m)
at System.Windows.Forms.Button.WndProc(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData)
at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Application.Run(ApplicationContext context)
at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.OnRun()
at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.DoApplicationModel()
at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Run(String[] commandLine)
at MPLS.My.MyApplication.Main(String[] Args) in 17d14f5c-a337-4978-8281-53493378c1071.vb:line 81
at System.AppDomain.nExecuteAssembly(Assembly assembly, String[] args)
at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart() |
|
|
|
|
|
|
|
发表于 3-4-2006 04:04 PM
|
显示全部楼层
原帖由 johe07 于 3-4-2006 03:46 PM 发表
它在messagebox那里出现了这个error
"Dynamic SQL generation is not supported against multiple base tables."
是我的design有问题了?
以下是它message的detail.. ...
这是从help file里截出来的解释
Automatically generates single-table commands used to reconcile changes made to a DataSet with the associated SQL Server database |
|
|
|
|
|
|
|
楼主 |
发表于 3-4-2006 04:35 PM
|
显示全部楼层
|
|
|
|
|
|
|
发表于 3-4-2006 07:09 PM
|
显示全部楼层
|
|
|
|
|
|
|
楼主 |
发表于 4-4-2006 08:09 AM
|
显示全部楼层
原帖由 astral 于 3-4-2006 19:09 发表
不是不可以,只是不是那样做啦。
你从那么多tables选资料出来,又没有告诉它要怎样update,连update去哪里都没告诉它,它又怎么知道要如何update呢?
为何你不在store procedure里直接update 你的cache(temp t ...
是吗?
update cache??没有听说过。。。。
去找找看咯。。。。 |
|
|
|
|
|
|
|
发表于 4-4-2006 09:02 AM
|
显示全部楼层
原帖由 johe07 于 4-4-2006 08:09 AM 发表
是吗?
update cache??没有听说过。。。。
去找找看咯。。。。
哎呀,我说的cache就是你的temp table啦。。。你不是把它当成cache来用吗? |
|
|
|
|
|
|
|
发表于 4-4-2006 09:21 AM
|
显示全部楼层
你的做法真复杂... 看得我眼花缭乱...
为什么不考虑用简单一点的方法? sql 可以自己写呀. |
|
|
|
|
|
|
|
楼主 |
发表于 4-4-2006 10:01 AM
|
显示全部楼层
|
|
|
|
|
|
|
楼主 |
发表于 4-4-2006 10:02 AM
|
显示全部楼层
原帖由 astral 于 4-4-2006 09:02 发表
哎呀,我说的cache就是你的temp table啦。。。你不是把它当成cache来用吗?
哦。。。明白了。。。。 |
|
|
|
|
|
|
|
楼主 |
发表于 14-9-2006 10:48 AM
|
显示全部楼层
Export资料进去Excel
各位,我又来了。。。
最近我有在做一个system,就是export SQL资料去Excel
我想问问,有什么方法可以很快
以下,是我的编程码
- Dim dsExcelExport As New System.Data.DataSet
- Dim daExcelExport As System.Data.SqlClient.SqlDataAdapter
- Dim Excel As New Excel.Application
- Dim intColumn, intRow, intColumnValue As Integer
- Dim strExcelFile As String
- Dim strFileName As String
- Dim conCurrent As New SqlClient.SqlConnection
- conCurrent.ConnectionString = "User ID=" & Lid & " ;Password =" & Lpwd & " ;Persist Security Info=False;Initial Catalog=(table_name) ;Data Source=(sql-svr)"
- 'conCurrent.ConnectionString = "data source=;initial catalog=pubs;User ID=sa;Password="
- daExcelExport = New System.Data.SqlClient.SqlDataAdapter(strSql, conCurrent)
- daExcelExport.Fill(dsExcelExport)
- Dim strAppPath = System.Reflection.Assembly.GetExecutingAssembly.Location.Substring(0, System.Reflection.Assembly.GetExecutingAssembly.Location.LastIndexOf("") + 1)
- With Excel
- .SheetsInNewWorkbook = 1
- .Workbooks.Add()
- .Worksheets(1).Select()
- 'For displaying the column name in the the excel file.
- For intColumn = 0 To dsExcelExport.Tables(0).Columns.Count - 1
- .Cells(1, intColumn + 1).Value = dsExcelExport.Tables(0).Columns(intColumn).ColumnName.ToString
- Next
- 'For displaying the column value row-by-row in the the excel file.
- For intRow = 0 To dsExcelExport.Tables(0).Rows.Count - 1
- For intColumnValue = 0 To dsExcelExport.Tables(0).Columns.Count - 1
- .Cells(intRow + 1, intColumnValue + 1).Value = dsExcelExport.Tables(0).Rows(intRow).ItemArray(intColumnValue).ToString
- Next
- Next
- 'strFileName = InputBox("Please enter the file name.", "Swapnil")
- strExcelFile = strAppPath & "MRPExport" + Date.Today.Date.ToString
- .ActiveWorkbook().SaveAs(strExcelFile)
- .ActiveWorkbook.Close()
- End With
- MessageBox.Show("File exported sucessfully.", "Exporting done", MessageBoxButtons.OK, MessageBoxIcon.Information)
- NormalExit:
- Excel.Quit()
- Excel = Nothing
- GC.Collect()
- Exit Function
复制代码
我要输出的资料大概有1万多个,以这个方法,我export需要很久
但是,如果我通过crystal report的export function, 在3分钟之内就export好了
我只是想问问,这个编程码是否可有改进的地方,加快速度?
[ 本帖最后由 johe07 于 14-9-2006 11:10 AM 编辑 ] |
|
|
|
|
|
|
|
发表于 14-9-2006 11:06 AM
|
显示全部楼层
原帖由 johe07 于 14-9-2006 10:48 AM 发表
各位,我又来了。。。
最近我有在做一个system,就是export SQL资料去Excel
我想问问,有什么方法可以很快
以下,是我的编程码
Dim dsExcelExport As New System.Data.DataSet
Dim daExcel ...
如何在EXCEL里的sheet加入10多万个record?有什么方法。。我尝试过。EXCEL最多一个sheet可以到65536 ROW而已
[ 本帖最后由 max5007 于 14-9-2006 11:08 AM 编辑 ] |
|
|
|
|
|
|
|
楼主 |
发表于 14-9-2006 11:10 AM
|
显示全部楼层
|
|
|
|
|
|
|
发表于 14-9-2006 07:23 PM
|
显示全部楼层
cell没用到formula的话,用stream writer write去.csv 好了。。,包你三秒内搞定。。 |
|
|
|
|
|
|
|
发表于 14-9-2006 09:13 PM
|
显示全部楼层
johe07 分批记录进不同的 excel 再加多线程,过后再结合 excel 档,估计会快很多很多。
另一个超好的方法(小章鱼之前用的)就是:把资料储存为 XML spreadsheet 格式,以 .xls 为扩延名,
excel 就可以打开了。
由于是纯文本,速度很快,也很方便多线程分批然后 merge
不过不知道 excel 2003 前的版本可不可以打开。 |
|
|
|
|
|
|
|
楼主 |
发表于 15-9-2006 12:11 AM
|
显示全部楼层
我要输出这些资料去spreadsheet是因为将会拿这些资料作计算。
所以,我不能输出成任何cvs,text等之类的 |
|
|
|
|
|
|
|
发表于 15-9-2006 12:16 AM
|
显示全部楼层
你输出。csv后,在把它save as .xls 咯。。
我也是每天用excel做data analysis 的。对我来说要是纯value的话
.csv 或.xls都没什么差别的。。
[ 本帖最后由 tensaix2j 于 15-9-2006 12:23 AM 编辑 ] |
|
|
|
|
|
|
|
发表于 15-9-2006 12:38 AM
|
显示全部楼层
have a try
- Sub ExportDataTableToCSV(ByRef dt As DataTable, ByVal strFilename As String)
- Dim i, j As Integer
- Try
- Dim sw As New System.IO.StreamWriter(strFilename)
- 'header
- For i = 0 To dt.Columns.Count - 1
- sw.Write(dt.Columns(i).ColumnName.ToString + " ,")
- Next i
- sw.Write(vbNewLine)
- 'data body
- For i = 0 To dt.Rows.Count - 1
- For j = 0 To dt.Columns.Count - 1
- sw.Write(dt.Rows(i)(j).ToString() + ",")
- Next j
- sw.Write(vbNewLine)
- Next i
- sw.Close()
- Catch ex As Exception
- Throw ex
- End Try
- End Sub
复制代码
[ 本帖最后由 tensaix2j 于 15-9-2006 12:44 AM 编辑 ] |
|
|
|
|
|
|
|
楼主 |
发表于 15-9-2006 09:42 AM
|
显示全部楼层
谢谢tensaix2j 的回复,这个我会在试试。
-------------------------------------------
现在我有一个棘手的问题,我不明白为什么做不到。
我在form里面,直接从dataset里把一个datatable拉进去form里做成了datagrid.
由于我要filter out data, 然后show 在grid里面,所以我做了以下的动作:
1. 在我的dataset designer里,右击我的datatable1,然后选"Add Query"
2. 我点击了"Query Builder"
3. 我在"Query Builder" 里面,在SQL Command栏目里,我加了" WHERE ID = @Param1", 可是他说我这个query有问题。
我想请问,为什么我加不到Parameter进去我的query里面?我有什么地方做错了?
这是他出现的错误讯息
Error in WHERE clause near '@'.
Unable to parse query text.
这个是成立的,因为我照着tutorial做,为什么tutorial可以成功,我的却不可以?
[ 本帖最后由 johe07 于 15-9-2006 09:44 AM 编辑 ] |
|
|
|
|
|
|
|
发表于 15-9-2006 10:11 PM
|
显示全部楼层
johe07 XML spreadsheet 如果把扩延名 .xml 换成 .xls
Microsoft Excel 是可以当成 excel 档来打开的(当然 tag 不能有错误)
也可以有 Formula
以下是一个简单的例子,试试抄进 Notepad 然后储存(扩延名记得换成 .xls)然后用 Microsoft Excel 打开
- <?xml version="1.0"?>
- <?mso-application progid="Excel.Sheet"?>
- <Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
- xmlns:o="urn:schemas-microsoft-com:office:office"
- xmlns:x="urn:schemas-microsoft-com:office:excel"
- xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
- xmlns:html="http://www.w3.org/TR/REC-html40">
- <Worksheet ss:Name="Sheet1">
- <Table>
- <Row><Cell><Data ss:Type="Number">1</Data></Cell><Cell><Data ss:Type="String">a</Data></Cell></Row>
- <Row><Cell><Data ss:Type="Number">2</Data></Cell><Cell><Data ss:Type="String">b</Data></Cell></Row>
- <Row><Cell><Data ss:Type="Number">3</Data></Cell><Cell><Data ss:Type="String">c</Data></Cell></Row>
- <Row><Cell><Data ss:Type="Number">4</Data></Cell><Cell><Data ss:Type="String">d</Data></Cell></Row>
- <Row><Cell><Data ss:Type="Number">5</Data></Cell><Cell><Data ss:Type="String">e</Data></Cell></Row>
- <Row><Cell><Data ss:Type="Number">6</Data></Cell><Cell><Data ss:Type="String">f</Data></Cell></Row>
- </Table>
- </Worksheet>
- </Workbook>
复制代码 |
|
|
|
|
|
|
| |
本周最热论坛帖子
|