|
Hi
I have a table (named information) that contains columns with the names (1,2,3,4,5,6,7,8,...210)
I entered a loop from i=1 to i=210 and inside the loop I write the following SQL statement:
string an = "SELECT " + i.ToString() + " FROM information WHERE id = '" + s.Id + "';";
I should get the string contained in the column named i but what I get is i itself (
Whay would be the problem
|
|
|
|
|
Well, you're asking it to select 1 from information where ID = s.ID. What did you expect ? Your columns are NAMED 1,2,3,4,5,6, up to 210 ? Sounds like God is punishing you for a terrible design....
Try this:
"SELECT i." + i.ToString() + " FROM information i WHERE id = '" + s.Id + "';";
Although I don't get why you need to kill performance by making 210 SQL calls instead of one ?
Christian Graus - Microsoft MVP - C++
|
|
|
|
|
It did not work.
exception error said: invalid use of "." in SQL statement!!!
|
|
|
|
|
Still because of the stupid column names. Try [i." + i.ToString() "]
etc. If you put the parameter in [], it may force it to accept it.
Christian Graus - Microsoft MVP - C++
|
|
|
|
|
Thanks it worked
it is not stupid :/
I am storing the answers of student each answer in one column as my istructor said.
But, would u tell me the idea of ur solution and why mine is wrong?
|
|
|
|
|
mhmo wrote:
I am storing the answers of student each answer in one column as my istructor said.
OK - that's fine, if that's how you want to do it. I just wouldn't name them 1,2,3,4,5. I'd name them something so that anyone who read the database would know what they were. Personally, I would not store them in this format at all, unless you want to use SQL to tell you who got what answer right, but that would be hard unless the questions are maths or multiple choice.
mhmo wrote:
But, would u tell me the idea of ur solution and why mine is wrong?
Yours is wrong because it makes a round trip to the database for every answer. If you do a SELECT * from information where blah blah, then you can get back a dataRow which you can access locally to get the individual values, without making a round trip to the server every time.
Christian Graus - Microsoft MVP - C++
|
|
|
|
|
it will enhance the performance if I used the * format?
//The answers are mulipchoice
|
|
|
|
|
By a factor of 210. Instead of 210 calls to the database, you make one, and then get all the values back into a local object that you can step through to find the replies.
If the questions are multiple choice, and there are always 210 questions, then there are reasons to put an answer per column, in terms of being able to query the data. I'd just name them Answer1, Answer2 or something, so I didn't need to use [] all the time.
Actually, even then I think I'd be more inclined to do a table that contains the student ID, the question ID and the answer in three columns, which would allow me to have as many or as few questions as I liked, still search the database for answers, and not waste any space.
Christian Graus - Microsoft MVP - C++
|
|
|
|
|
The idea is that we will use Crystal Reports to print the answers of each or a specific student in a specific format.
But why we should use []?!!
|
|
|
|
|
mhmo wrote:
The idea is that we will use Crystal Reports to print the answers of each or a specific student in a specific format.
OK - either way, I think the data format I've specified is better, but I'm not familiar with Crystal Reports. If it needs all the values to be in one row, that would just be crap though.
mhmo wrote:
But why we should use []?!!
Because a number on it's own is a reserved value, it's not really an acceptable column name. The [] tells it we used bad column names, and asks it to live with it.
Christian Graus - Microsoft MVP - C++
|
|
|
|
|
|
>... but I'm not familiar with Crystal Reports. If it needs all the values to be in one row, that would just be crap though.
You can pivot data in Crystal, but it's still crap.
|
|
|
|
|
Just a hint:
Read up on how others have structured a multi-choice test in a database. Your table schema is plain crazy!
|
|
|
|
|
Ok
Would u give a link for some
thanks
|
|
|
|
|
|
Did you manually type in every column name?
What is the deal with schools these days? Do they just tell you to use a database for something, without teaching you anything at all about how to use a database, or how to design your tables, etc.?
Matt Gerrans
|
|
|
|
|
No I added them by a loop.
Regarding teaching ... this is our way to learn do projects and projects projects projects projects projects projects .
|
|
|
|
|
Hi there,
Assume a database with some tables made in Access 2000.
I can connect to it via oledbadapter (from C#) read rows, add rows etc.
Then I use ADOX to add a new table. The columns are created but no rows added.
The new table seems to be OK in Access 2000.
In Access I can add/delet rows.
BUT! When I try to add a new row via the oledbadapter (from C#) it fails.
Upon
MyoledbAdapter.InsertCommand.ExecuteNonQuery();
I get the error message “Syntax error in command”.
Well, there is no syntax error. The very same code inserts a new row into the other tables that were created in Access without any problem. (and of course I checked and double and triple checked it)
Of course I am missing something. But what? Is the table created with ADOX different? On what way?
I tried to find if there is a difference but it seems to be hopeless.
Pls. direct me to the source if you know where it is.
Many thanks,
Akos
|
|
|
|
|
In my current project i have two forms say FormA and FormB in which each form performs some specific task, how can i shift between the forms at a time.
As I said that I want to shift between the forms. It means that I have a function with two parameters if first parameter is null and second parameter is having some value it should call FormB. And Vice versa
i.e.
abc( Null, 10) here the first parameter is null and the second is value 10. Then it should call FormB similarly
abc (10, Null) here the first parameter value is 10 and the second is Null. Then it should call FormA.
How can i do it.
|
|
|
|
|
What do you mean - show one at a time ? You can have a main window that spawns form1, and when form1 closes, spawns form2. Or you can have Form1 the main window, and a next button that hides form1 and shows form2. It's hard to say, without knowing more specifics.
Christian Graus - Microsoft MVP - C++
|
|
|
|
|
using System;<br />
using System.Drawing;<br />
using System.Windows.Forms;<br />
using Microsoft.DirectX;<br />
using Microsoft.DirectX.Direct3D;<br />
<br />
<br />
namespace XSkate<br />
{<br />
public partial class MainForm : Form<br />
{<br />
Device device = null;
<br />
public MainForm()<br />
{<br />
InitializeComponent();<br />
}<br />
<br />
public bool InitializeGraphics()<br />
{<br />
try<br />
{<br />
PresentParameters presentParams = new PresentParameters();<br />
presentParams.Windowed = true;<br />
presentParams.SwapEffect = SwapEffect.Discard;<br />
device = new Device(0, DeviceType.Hardware, this, CreateFlags.HardwareVertexProcessing, presentParams);<br />
return true;<br />
}<br />
catch (DirectXException)<br />
{<br />
DisplayError("Could not initialize Direct3D, now exiting.", true);<br />
return false;<br />
}<br />
}<br />
<br />
private void Render()<br />
{<br />
if (device == null)<br />
{<br />
return;<br />
}<br />
<br />
device.Clear(ClearFlags.Target, System.Drawing.Color.Blue, 1.0f, 0);<br />
device.BeginScene();<br />
<br />
<br />
device.EndScene();<br />
device.Present();<br />
}<br />
<br />
protected override void OnPaint(System.Windows.Forms.PaintEventArgs e)<br />
{<br />
this.Render();<br />
}<br />
<br />
protected override void OnKeyPress(System.Windows.Forms.KeyPressEventArgs e)<br />
{<br />
if ((int)(byte)e.KeyChar == (int)System.Windows.Forms.Keys.Escape)<br />
{<br />
this.Close();<br />
}<br />
}<br />
<br />
static void Main()<br />
{<br />
using (MainForm frm = new MainForm())<br />
{<br />
if (!frm.InitializeGraphics())<br />
{<br />
return;<br />
}<br />
<br />
frm.Show();<br />
<br />
while (frm.Created)<br />
{<br />
frm.Render();<br />
Application.DoEvents();<br />
}<br />
}<br />
}<br />
<br />
private void DisplayError(string Message, bool Fatal)<br />
{<br />
if (Fatal)<br />
{<br />
MessageBox.Show(Message, "Fatal Error", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);<br />
}<br />
else<br />
{<br />
MessageBox.Show(Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);<br />
}<br />
}<br />
}<br />
}
It works but I don't know why the console window pops up along with the form, I don't want it to but what am I doing wrong? I am using Visual C#.NET 2005 beta 2, plz help, this is all the code I have in the project, except for the form code which is probably unnecessary for this problem, again plz help. confused:
IM PROUD TO BE A GMAIL;
|
|
|
|
|
Is your project's Output Type specified as Console application?
Regards
Senthil
_____________________________
My Blog | My Articles | WinMacro
|
|
|
|
|
I thought of that, but he has a mainform, surely the wizard added that ?
Christian Graus - Microsoft MVP - C++
|
|
|
|
|
i renamed the whole class to mainform.. using refactor of course
IM PROUD TO BE A GMAIL;
|
|
|
|
|
That was it, sry I'm new to .net and C#, in c++ you didn't have to do this :P, that was it thank you.
IM PROUD TO BE A GMAIL;
|
|
|
|
|